我在bash脚本中使用此条件
if [ $USE_TEST -eq 1 ]; then
echo "Hello"
fi
我将USE_TEST
作为environment variables
传递。
如果我传递了env变量,那么shell执行正常但是如果我没有变量那么我就得到了这个
[: -eq: unexpected operator
我该如何解决?
答案 0 :(得分:2)
这是引用很重要的事情之一;如果未定义$ USE_TEST,则您的语句将扩展为:
if [ -eq 1 ]; then
常见修复:
if [ "$USE_TEST" -eq 1 ]; then
...虽然这也意味着切换到字符串比较,因为-eq
将以空字符串打破:
if [ "$USE_TEST" = 1 ]; then
但您也可以考虑使用[[
(内置bash)或${USE_TEST:-0}
(指定默认值)。
答案 1 :(得分:1)
指定默认值(例如0)以避免空变量:
if [ ${USE_TEST:=0} -eq 1 ]; then
来自man bash
:
${parameter:=word}
:分配默认值。如果参数未设置或为null,则将字的扩展分配给参数。然后替换参数的值。
答案 2 :(得分:1)
我假设这是一个布尔值,它是1或0,如果没有定义,则默认值为0。在这种情况下,您可以使用特殊的bash语法:
if (( USE_TEST ));
echo "using test"
fi
"("括号用于数字值。在这种情况下可以省略美元符号。