使用bash脚本获取env变量的错误

时间:2015-08-17 05:36:06

标签: linux bash shell ubuntu environment-variables

我在bash脚本中使用此条件

if [ $USE_TEST -eq 1 ]; then
echo "Hello"
fi

我将USE_TEST作为environment variables传递。

如果我传递了env变量,那么shell执行正常但是如果我没有变量那么我就得到了这个

[: -eq: unexpected operator

我该如何解决?

3 个答案:

答案 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

"("括号用于数字值。在这种情况下可以省略美元符号。