2011-04-24 197 views
2

冒號命令是一個空命令。Bash Shell - The:命令

The:構造對於變量的條件設置也很有用。例如,

: ${var:=value} 

沒有,外殼會試圖評估是$ var作爲一個命令。 < = ???

我不太明白上面陳述中的最後一句話。任何人都可以給我一些細節嗎?

謝謝

回答

5

嘗試

var=badcommand 
$var 

你會得到

嘗試

var= 
${var:=badcommand} 

,你會得到相同的。

即使在執行可變擴展之後,shell(例如bash)也會嘗試在每個命令行上將第一個字作爲命令運行。

唯一的例外是

var=value 

其外殼專門對待。

您提供的示例中的技巧是${var:=value}可以在命令行的任何位置工作,例如,

# set newvar to somevalue if it isn't already set 
echo ${newvar:=somevalue} 
# show that newvar has been set by the above command 
echo $newvar 

但我們真的不連想呼應的價值,所以我們想要的東西比
echo ${newvar:=somevalue}更好。

:命令讓我們可以在沒有任何其他操作的情況下執行任務。

1

${var}自身執行存儲在$var命令。添加替代參數不會改變這個,所以你用:來抵消這個。

+0

太真。我懷疑這真的解釋給OP – sehe 2011-04-24 22:44:40

2

我想那人網頁作家的意思是

: ${var:=value} 

可以作爲一個捷徑,而不是說

if [ -z "$var" ]; then 
    var=value 
fi 
+0

-z字符串如果字符串爲空(空字符串),則爲真 – q0987 2011-04-27 16:46:08

0

試試這個:

$ help : 
:: : 
    Null command. 

    No effect; the command does nothing. 

    Exit Status: 
    Always succeeds. 
+0

其他人是否認爲這本身就是一個輕微的悖論? '沒有效果'/'退出狀態:總是成功。這意味着它當然會做某些事情,但沒有明確說明。它可以進行可變的擴展,分配和破壞退出代碼。 – sehe 2011-04-27 18:30:43

+0

是的,幾乎沒有;-) – 2011-04-27 18:41:48