1. 程式人生 > >Shell語法錯誤----變數與空格[: too many arguments

Shell語法錯誤----變數與空格[: too many arguments

我們先來看一段指令碼

ret="Peter Anne"

if [ $ret == "Peter Anne" ]; then

  echo "pass"

else

  echo "failed"

fi

程式上看,這段程式碼的邏輯和寫法都是沒有錯誤的。但是其實,實際執行結果將會是:

run.sh:  [: too many arguments(引數過多)

failed

大致的意思是說,if 後面所跟著的引數過多了,我們可以看見這句if語句

if [ $ret == "Peter Anne" ];

它的引數分別為 [,$ret, ==,"Peter Anne",],一共5個引數。(”[“也是被當作引數,這就是為什麼”[“一定要有空格的緣故,詳細可以檢視Linux的書籍)

如果正常5個引數,是沒有問題的,但是問題出在了$ret變數裡。

其實,在Linux系統中的真實解析方式,其實是:

if [ Peter Anne == "Peter Anne" ],引數則分為:

[,Peter,Anne, ==,"Peter Anne",],一共6個引數。

所以上述程式碼,其實應該改寫成($ret變為"$ret"):

ret="Peter Anne"

if [ "$ret" == "Peter Anne" ]; then(引數則為5個)

  echo "pass"

else

  echo "failed"

fi

這種寫法才是正確的。