Bash 如果语句失败,为什么要进行字符串比较

Bash 如果语句失败,为什么要进行字符串比较,bash,sh,Bash,Sh,我希望下面的代码只打印一个x,但它总是提供两个: #!/bin/sh read i if [[ $i!=1 ]];then echo x fi if [[ $i==1 ]];then echo x fi 为什么会发生这种情况?首先,您的脚本在POSIXsh中无效,因为[[在sh中未定义 另一方面,在bash中,比较运算符周围缺少空格!=和=。这就是为什么[[]]中的表达式被视为非零长度字符串,这是真实的。因此,echo被打印两次 正如StackOverflow上多次建议的那样,

我希望下面的代码只打印一个
x
,但它总是提供两个:

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

为什么会发生这种情况?

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

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

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

请查看: