我有這樣一段代碼語法錯誤:
if(("$op" == "q")); then
它拋出這個錯誤:
l5p3.sh: line 10: ((: + == q: syntax error: operand expected (error token is "== q")
有什麼問題?如何將$ op與字母$ q進行比較?
我有這樣一段代碼語法錯誤:
if(("$op" == "q")); then
它拋出這個錯誤:
l5p3.sh: line 10: ((: + == q: syntax error: operand expected (error token is "== q")
有什麼問題?如何將$ op與字母$ q進行比較?
((...))
(對於算術表達式)可能不是你想要的。檢查以下內容:
if (("asd" == "bla")); then
echo test
else
echo bah
fi
它打印test
在Bash和像dash
嚴格的兼容Bourne外殼的錯誤。
嘗試以下操作來代替:
if [[ $op == q ]]; then
爲什麼不((和))?這就是我以前的工作方式,((和)),它工作得很好 – FinalDestiny 2012-03-27 00:07:24
@FinalDestiny'(('和'))'用於數學運算。你需要'[['和']]'或'['和']'(這兩者完全不同 - 前者通常更好)用於比較字符串。 – 2012-03-27 00:10:45
@NiklasB。 '(($ op == q))'實際上是解引用'$ q'並在那裏尋找一個數字;這與'[[$ op = q]]'完全不同。 (''[''表達式不需要引號,''和'['不同,'只有當這個值可以被解釋爲glob模式時才需要它們) 。 – 2012-03-27 00:12:36
字符串比較要使用雙括號沒有括號。正確的寫法是:
if [[ "$op" == "q" ]]; then
雙括號用於算術而非布爾表達式。見http://tldp.org/LDP/abs/html/dblparens.html
YES!WORKS!謝謝。 – FinalDestiny 2012-03-27 00:17:05
嘗試改變這一點,之間的[]是非常重要的空間:
op="q"
if [ "$op" == "q" ]; then
echo "hi"
fi
,或者你可以像這樣
if test "$op" = "q" ; then
echo 'hi'
fi
作爲一項規則,順便說一句,是更自由在編寫shell腳本時,在你的空格中:'if [「$ op」=「q」]'會起作用,而'if [$ op = q]'不會。 – 2012-03-27 00:16:01