我有这样一段代码语法错误:
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