shell指令碼if判斷語句報錯[: too many arguments的兩種原因

來源:互聯網
上載者:User

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.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.