我正在评估以下表达式。即使CMD是START或STARTED,它总是评估为真。我做错了吗?
if [ "$CMD"="START" ]; then
echo fi
fi
答案 0 :(得分:8)
尝试空格
if [ "$CMD" = "START" ] ; then
echo fi
fi
答案 1 :(得分:1)
您需要在=
周围留出空格。
#CMD="STARTED"
#if [ "$CMD" = "START" ] ; then echo fi; fi
#CMD="START"
#if [ "$CMD" = "START" ] ; then echo fi; fi
fi
#
答案 2 :(得分:1)
来自http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html:
[] vs. [[]]
与[,[[防止变量值的单词分割相反]。因此,如果 VAR =“var with spaces”,你不需要在测试中双引号$ VAR - 尽管使用引号仍然是一个好习惯。此外,[[阻止路径名扩展,因此带有通配符的文字字符串不会尝试 扩展到文件名。使用[[,==和!=将字符串解释为 正确的shell glob模式要匹配的值 左,例如:[[“value”== val *]]。
所以,试试:
if [[ "$CMD" == "START" ]]; then
echo "fi"
fi
答案 3 :(得分:0)
你应该添加空格:
if [ "$CMD" == "START" ]; then
...
fi