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脚本(也可以作为命令行工具使用)总是很好的,这将帮助您捕获并解释许多此类错误。请查看: