Bash
Bash:為什麼“設置”的行為不像我期望的那樣?
我觀察到只有導出變數的值通過我的 Mac OS X 附加到我的 PATH 變數中
.bash_profile
。然而,本地設置變數的值不能。為什麼不能將局部變數附加到路徑?“你誤解了一些東西,但是什麼?貼出讓你困惑的程式碼。——昨天的吉爾斯”
請考慮這個片段,我將 MONGODB 變數設置為:
set MONGODB="/usr/local/mongodb/bin" export PATH=${PATH}:${MONGODB}
我
source .bash_profile
在終端。我看到以下迴聲:
PATH=~/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:
然而,如果我改為導出 MONGODB 並獲取 my
.bash_profile
,我會看到以下迴聲:
PATH=~/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/local/mongodb/bin
也許,使用
set
不當?
set MONGODB="/usr/local/mongodb/bin"
這不是變數賦值。(它在 C shell (csh, tcsh) 中是一個,但在 Bourne 樣式的 shell (sh, ash, bash, ksh, zsh, …) 中不是。)這是對
set
內置函式的呼叫,它設置位置參數, 即$1
,$2
等。嘗試在終端中執行此命令,然後echo $1
.要為 shell 變數賦值,只需編寫
MONGODB="/usr/local/mongodb/bin"
這將創建一個 shell 變數(也稱為(命名)參數),您可以使用
$MONGODB
. 該變數保留在 shell 內部,除非您使用export MONGODB
. 如果導出,該變數也可以通過environment對該 shell 啟動的所有程序可見。您可以將賦值和導出壓縮為一行:export MONGODB="/usr/local/mongodb/bin"
MONGODB
對於您正在做的事情,腳本之外似乎不需要,並且PATH
已經導出(一旦導出變數,如果您分配一個新值,它就會反映在環境中)。所以你可以寫:MONGODB="/usr/local/mongodb/bin" PATH=${PATH}:${MONGODB}