2012-03-27 48 views
1

我有這樣一段代碼語法錯誤:

if(("$op" == "q")); then 

它拋出這個錯誤:

l5p3.sh: line 10: ((: + == q: syntax error: operand expected (error token is "== q") 

有什麼問題?如何將$ op與字母$ q進行比較?

+1

作爲一項規則,順便說一句,是更自由在編寫shell腳本時,在你的空格中:'if [「$ op」=「q」]'會起作用,而'if [$ op = q]'不會。 – 2012-03-27 00:16:01

回答

5

((...))(對於算術表達式)可能不是你想要的。檢查以下內容:

if (("asd" == "bla")); then 
    echo test 
else 
    echo bah 
fi 

它打印test在Bash和像dash嚴格的兼容Bourne外殼的錯誤。

嘗試以下操作來代替:

if [[ $op == q ]]; then 
+0

爲什麼不((和))?這就是我以前的工作方式,((和)),它工作得很好 – FinalDestiny 2012-03-27 00:07:24

+0

@FinalDestiny'(('和'))'用於數學運算。你需要'[['和']]'或'['和']'(這兩者完全不同 - 前者通常更好)用於比較字符串。 – 2012-03-27 00:10:45

+0

@NiklasB。 '(($ op == q))'實際上是解引用'$ q'並在那裏尋找一個數字;這與'[[$ op = q]]'完全不同。 (''[''表達式不需要引號,''和'['不同,'只有當這個值可以被解釋爲glob模式時才需要它們) 。 – 2012-03-27 00:12:36

0

嘗試改變這一點,之間的[]是非常重要的空間:

op="q" 
if [ "$op" == "q" ]; then 
    echo "hi" 
fi 
0

,或者你可以像這樣

if test "$op" = "q" ; then 
    echo 'hi' 
fi