shell指令碼,if判斷語句報錯[: too many arguments
我遇到過兩種情況:
1、第一中情況就是網上大家說的,字串變數中可能存在空格,shell解析時將其認為是多個參數,再進行判斷時,無法知道該擷取哪個值,例如:
指令碼ee.sh:
strings1="hello world" strings2="hello world"
if [ $strings1 = $strings2 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
執行結果中報錯:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
並自動執行了else分支中的語句。
而下面這段語句就不會這樣:
指令碼ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
執行結果:strings1 is same as strings2
2、第二種是我自己初步接觸shell指令碼,很多文法規則不太熟悉時遇到的,我將其記為——多重判斷:
還是以上面的例子,將第二段稍微改一下:
指令碼ee.sh:
strings1="hello world"
strings2="hello world"
if [ "$strings1" = "$strings2" -eq 1 ]
then
echo "strings1 is same as strings2"
else
echo "strings1 is different from strings2"
fi
執行結果:
ee.sh: line 3: [: too many arguments
strings1 is different from strings2
這裡是按照常規的思路來寫的,“ "$strings1" = "$strings2"先判斷兩個字串是否相等,如果相等這個結果就是true,而true在一般語言中通常可以等價於1,因此又將這個結果跟1進行比較”,其實在這個邏輯中,我忽略了"$strings1" = "$strings2"本身就是個判斷條件,執行結果就是true或false,而不需要再對這個結果判斷它是否是1.