2013-01-20 48 views
1

bash中的[test]和[[test]]有什麼區別? 什麼時候比另一個更合適,最後是;bash中的[test]和[[test]]有什麼區別?

if [[ -z $DIRECTORY ]]; 
then 
    DIRECTORY=html 
fi 

if [ ! -d "$DIRECTORY" ]; then 
    echo installation directory "'${DIRECTORY}'" does not exist 
    exit 1 
fi 
+1

可能重複[bash:雙或單括號,括號,花括號](http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces)和[ \ [和\ [\ [在bash中?](http://stackoverflow.com/q/3427872/218196))之間有什麼區別? –

回答

0

我們通常使用單一的方括號,當我們:

  • 檢查一番的文件和要使用的模式(如星號):if [ -L $file ]; then
  • 檢查artithmetic表達式:if [ $a -lt $b ]; then
  • 檢查的東西用繩子和要使用" "和治療特殊字符爲正常(如星號):if [ -z "$string" ]; then

我們通常雙方括號,當我們:

  • 想用圖案字符串(例如星號):if [[ "$string1" == *[sS]tring* ]]; then
  • 文件名(例如星號)中的塊模式例如我們搜索文件名爲* .SH:if [[ -a *.sh ]]; then
  • 想使用運營商& &和||:if [[ $a == 3 || $b == 4]]; then
  • 不想把字符串" "
+1

你做了一個相當人爲的區別,因爲你在單個括號下列出的所有東西都可以用雙括號來完成。 – chepner

+0

當然你是對的。它只是寫我記得什麼時候使用括號:) –

+1

我的觀點是,你不需要*使用單個括號中的任何一個。如果您正在編寫需要與POSIX兼容的代碼,請使用單個括號;如果您的代碼只需要在'bash'下運行,請使用雙括號。 – chepner

0

[是外殼,[[是對於bash 。

例如:
嘗試[ $A -eq 1 ]:如果$A沒有設置,它拋出一個錯誤。
[[ $A -eq 1 ]]將起作用。

相關問題