Bash

在 .bashrc 中使用導出

  • August 24, 2019

我注意到我的前面.bashrc有一些行export,例如

export HISTTIMEFORMAT="%b-%d  %H:%M  "
...
export MYSQL_HISTFILE="/root/.mysql_history"

而其他人則沒有,例如

HISTSIZE=100000

我想知道,首先,這是否正確,其次是使用exportin的規則是什麼.bashrc

您只需要export在 shell 中啟動的其他程序應該“看到”的變數,而僅在 shell 本身內部使用的變數不需要export編輯。

這是手冊頁所說的:

The  supplied  names are marked for automatic export to the environ‐
ment of subsequently executed commands.  If the -f option is  given,
the  names  refer to functions.  If no names are given, or if the -p
option is supplied, a list of all names that are  exported  in  this
shell  is  printed.   The -n option causes the export property to be
removed from each name.  If a variable name is  followed  by  =word,
the  value  of  the variable is set to word.  export returns an exit
status of 0 unless an invalid option  is  encountered,  one  of  the
names  is  not a valid shell variable name, or -f is supplied with a
name that is not a function.

這可以通過以下方式證明:

$ MYVAR="value"
$ echo ${MYVAR}
value
$ echo 'echo ${MYVAR}' > echo.sh
$ chmod +x echo.sh
$ ./echo.sh

$ export MYVAR="value-exported"
$ ./echo.sh
value-exported

解釋:

  • 我首先設置${MYVAR}為帶有MYVAR="value". 使用echoI 可以回顯它的值,因為回顯是外殼的一部分。
  • 然後我創建echo.sh. 這是一個基本相同的小腳本,它只是 echoes ${MYVAR},但不同之處在於它將在不同的程序中執行,因為它是一個單獨的腳本。
  • 呼叫echo.sh時什麼也不輸出,因為新程序沒有繼承${MYVAR}
  • 然後我用關鍵字導出${MYVAR}到我的環境中export
  • 當我現在echo.sh再次執行相同的內容時,它會回顯 的內容,${MYVAR}因為它是從環境中獲取的

所以回答你的問題:

這取決於將在何處使用變數,是否必須導出它。

引用自:https://unix.stackexchange.com/questions/107851