Bash

Bash:為什麼“設置”的行為不像我期望的那樣?

  • May 1, 2020

我觀察到只有導出變數的值通過我的 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對該 s​​hell 啟動的所有程序可見。您可以將賦值和導出壓縮為一行:

export MONGODB="/usr/local/mongodb/bin"

MONGODB對於您正在做的事情,腳本之外似乎不需要,並且PATH已經導出(一旦導出變數,如果您分配一個新值,它就會反映在環境中)。所以你可以寫:

MONGODB="/usr/local/mongodb/bin"    
PATH=${PATH}:${MONGODB}

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