2014-10-31 149 views
2

有什麼區別?爲什麼這些工作:

echo $LOGNAME  #prints username 
echo "$(logname)" #prints username 

但這不是:

echo "$(LOGNAME)" #prints command not found. 
+3

它恰好與'$ LOGNAME'和'$(logname)'輸出相同。你可以用'env'看到'$ LOGNAME'這樣的環境變量,而'logname'是一個你可以通過'man logname'獲得信息的命令。 – fedorqui 2014-10-31 10:08:38

+0

@fedorqui:你的意思是'$ LOGNAME'有時可以不同於'$(logname)'? – mrdaliri 2014-10-31 10:12:48

+2

它可以不同,因爲你可以爲你設置'LOGNAME'。試試看:'LOGNAME = blblbl;回聲「$ LOGNAME」'。 – 2014-10-31 10:16:39

回答

4

logname是一個命令。
LOGNAME是一個變量。

$(logname)因爲存在logname命令。
$(LOGNAME)嘗試運行不存在的命令LOGNAME

閱讀following useful guide

4

$LOGNAME是一個變量。 logname是一個命令。當你做

echo $LOGNAME 

你是呼應變量,而當你做

echo "$(logname)" 

您迴盪在執行命令的結果。正好是輸出結果相同的情況。

如果你做env | grep LOGNAME,你會看到$LOGNAME是一個環境變量,如果你做which logname你會看到可執行文件的路徑。但是,如果你做which LOGNAME,你會看到沒有輸出。 echo $?顯示該命令的退出狀態爲1,這意味着不能找到可執行文件。

巧合的是,你可以用$PWDpwd做同樣的事情。

相關問題