我希望以下代码只能打印一个x
,但它总是会给出两个:
#!/bin/sh
read i
if [[ $i!=1 ]];then
echo x
fi
if [[ $i==1 ]];then
echo x
fi
为什么会这样?
答案 0 :(得分:1)
首先,您的脚本在POSIX sh
中无效,因为[[
中 sh
未定义。
另一方面,在bash
中,您在比较运算符 !=
和==
周围缺少空格。这就是为什么[[ ]]
内的表达式被视为非零长度字符串的原因,这是真实的。因此,echo
打印两次。
正如在StackOverflow上多次提到的那样,通过shellcheck(也可以作为命令行工具)运行shell脚本总是很好,这将帮助您捕获并解释许多此类错误。