2012-03-27 50 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