Bash
在 .bashrc 中使用導出
我注意到我的前面
.bashrc
有一些行export
,例如export HISTTIMEFORMAT="%b-%d %H:%M " ... export MYSQL_HISTFILE="/root/.mysql_history"
而其他人則沒有,例如
HISTSIZE=100000
我想知道,首先,這是否正確,其次是使用
export
in的規則是什麼.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"
. 使用echo
I 可以回顯它的值,因為回顯是外殼的一部分。- 然後我創建
echo.sh
. 這是一個基本相同的小腳本,它只是 echoes${MYVAR}
,但不同之處在於它將在不同的程序中執行,因為它是一個單獨的腳本。- 呼叫
echo.sh
時什麼也不輸出,因為新程序沒有繼承${MYVAR}
- 然後我用關鍵字導出
${MYVAR}
到我的環境中export
- 當我現在
echo.sh
再次執行相同的內容時,它會回顯 的內容,${MYVAR}
因為它是從環境中獲取的所以回答你的問題:
這取決於將在何處使用變數,是否必須導出它。