在Bash腳本中,以下片段有什麼區別?Bash腳本if語句
1)使用單括號:
if [ "$1" = VALUE ] ; then
# code
fi
2)使用雙括號:
if [[ "$1" = VALUE ]] ; then
# code
fi
在Bash腳本中,以下片段有什麼區別?Bash腳本if語句
1)使用單括號:
if [ "$1" = VALUE ] ; then
# code
fi
2)使用雙括號:
if [[ "$1" = VALUE ]] ; then
# code
fi
的[[]]構建體的[]中的更通用的擊版本。這是從ksh88採用的擴展測試命令。
使用[[]]測試結構,而不是可以防止腳本中的許多邏輯錯誤。例如,儘管在[]構造中給出了一個錯誤,但是在[[]]測試中可以使用& &,||,<和>運算符。
More info on the Advanced Bash Scripting Guide。
在您的代碼片段中,沒有任何區別,因爲您沒有使用任何附加功能。
使用[[
可抑制括號中表達式的正常詞分割和路徑名擴展。它還可以啓用一些附加操作,如模式匹配
[
是bash內建的,[[
是關鍵字。請參閱bash FAQ。請注意:互聯網上的大多數bash腳本都是廢話(不要與帶空格的文件名一起工作,引入隱藏的安全漏洞等),而且bash要比人們想象的要難得多。如果你想做bash編程,你至少應該學習bash guide和bash pitfalls。
只是在需要的情況下,便攜性:
對於便攜性的測試,你可以得到的是Bourne通過傳家寶項目殼或:
http://freshmeat.net/projects/bournesh
(在Mac OS X,例如,/ bin中/ sh不是純Bourne外殼。)
這也是一個外部程序,這並不意味着它不是內建的。
which [
/usr/bin/[
在你必須使用-lt單括號「小於」別名<,而其他人則可以使用<
if [ 3 -lt 4 ] ; then echo yes ; fi
yes
if [ 3 < 4 ] ; then echo yes ; fi
bash: 4: No such file or directory
if [[ 3 < 4 ]] ; then echo yes ; fi
yes
if [[ 3 -lt 4 ]] ; then echo yes ; fi
yes
4:沒有這樣的文件的手段,它試圖從讀名爲「4」的文件 - 重定向stdin <>和stdout相同。
[提出問題](http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces) – 2010-04-14 22:56:15