我理解bash中的冒號操作符,其行爲類似於a null,我知道它在parameter expansion中使用,以及被其他方式使用,但有人可以解釋這一點:
: ${SOMETHING='value'}
從實驗我知道,這個設置環境變量$SOMETHING
到'value'
但爲什麼呢?
「僅僅因爲它確實」是一個有效的答案,但是請指向我的文檔(我似乎無法找到)或者這個用法的專用名稱會很有用。儘管如此,我希望有一個更具啓發性的解釋。
我理解bash中的冒號操作符,其行爲類似於a null,我知道它在parameter expansion中使用,以及被其他方式使用,但有人可以解釋這一點:
: ${SOMETHING='value'}
從實驗我知道,這個設置環境變量$SOMETHING
到'value'
但爲什麼呢?
「僅僅因爲它確實」是一個有效的答案,但是請指向我的文檔(我似乎無法找到)或者這個用法的專用名稱會很有用。儘管如此,我希望有一個更具啓發性的解釋。
表達式將SOMETHING設置爲value
(如果尚未設置)。在許多情況下,這是一個有用的操作員。然而,它也返回指定的值,所以如果你只是執行
${SOMETHING='value'}
那麼你的shell會嘗試調用命令value
。這可能會或可能不會做一些不需要的事情;至少它會拋出一條消息「value:command not found」。
爲了避免這種情況,您可以使用無操作:
,它會評估其參數,然後將其拋出,而不是執行它。
':'內建命令記錄在[這裏](http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins)。它也是[POSIX標準](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#colon)。 –
也解釋了[這裏](http://www.tldp.org/LDP/abs/html/special-chars.html#COLON0REF)。 –
解釋這裏: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.
我建議http://wiki.bash-hackers.org/syntax/pe或http://mywiki.wooledge.org/BashFAQ/073(及其鏈接)作爲比ABS更好的參考(它是長期維持不變的並且在其示例中傾向於展示不良實踐)。 –
注意':'存在於Bourne shell的內置和ksh以及bash的。 – ghoti