为什么这个字符串比较if语句无效

时间:2017-07-23 13:53:33

标签: bash sh

我希望以下代码只能打印一个x,但它总是会给出两个:

#!/bin/sh
read i
if [[ $i!=1 ]];then
    echo x
fi
if [[ $i==1 ]];then
    echo x
fi

为什么会这样?

1 个答案:

答案 0 :(得分:1)

首先,您的脚本在POSIX sh中无效,因为[[ sh未定义。

另一方面,在bash中,您在比较运算符 !===周围缺少空格。这就是为什么[[ ]]内的表达式被视为非零长度字符串的原因,这是真实的。因此,echo打印两次。

正如在StackOverflow上多次提到的那样,通过shellcheck(也可以作为命令行工具)运行shell脚本总是很好,这将帮助您捕获并解释许多此类错误。