2011-09-16 24 views
55

我理解bash中的冒號操作符,其行爲類似於a null,我知道它在parameter expansion中使用,以及被其他方式使用,但有人可以解釋這一點:

: ${SOMETHING='value'} 

從實驗我知道,這個設置環境變量$SOMETHING'value'但爲什麼呢?

「僅僅因爲它確實」是一個有效的答案,但是請指向我的文檔(我似乎無法找到)或者這個用法的專用名稱會很有用。儘管如此,我希望有一個更具啓發性的解釋。

+1

注意':'存在於Bourne shell的內置和ksh以及bash的。 – ghoti

回答

60

表達式將SOMETHING設置爲value(如果尚未設置)。在許多情況下,這是一個有用的操作員。然而,它也返回指定的值,所以如果你只是執行

${SOMETHING='value'} 

那麼你的shell會嘗試調用命令value。這可能會或可能不會做一些不需要的事情;至少它會拋出一條消息「value:command not found」。

爲了避免這種情況,您可以使用無操作:,它會評估其參數,然後將其拋出,而不是執行它。

+9

':'內建命令記錄在[這裏](http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins)。它也是[POSIX標準](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#colon)。 –

+3

也解釋了[這裏](http://www.tldp.org/LDP/abs/html/special-chars.html#COLON0REF)。 –

5

解釋這裏:http://tldp.org/LDP/abs/html/parameter-substitution.html

如果未設置參數,將其設置爲默認值。

兩種形式幾乎相同。該:僅在 $參數已被聲明時纔有所作爲,並且如上所述爲空,[1]。

echo ${var=abc} # abc 
echo ${var=xyz} # abc 
# $var had already been set to abc, so it did not change. 
+2

我建議http://wiki.bash-hackers.org/syntax/pe或http://mywiki.wooledge.org/BashFAQ/073(及其鏈接)作爲比ABS更好的參考(它是長期維持不變的並且在其示例中傾向於展示不良實踐)。 –