my@comp:~/wtfdir$ cat wtf.sh
str1=$(echo "")
str2=$(echo "")
if [ $str1 != $str2 ]; then
echo "WTF?!?!"
fi
my@comp:~/wtfdir$ ./wtf.sh
WTF?!?!
my@comp:~/wtfdir$
WTF在这里进行?!
我是如何编写上述代码的:谷歌搜索“bash compare strings”把我带到了这个网站,它说:
您可以使用 if 语句在 bash 中检查两个字符串的相等和不相等。“==”用于检查相等性,“!=”用于检查字符串的不相等性。
然而我得到了上述内容?
我不明白什么?我究竟做错了什么?
您根本没有进行比较,因为您没有在必须使用引号的地方使用引号。请参阅http://shellcheck.net/关于SC2086 中未加引号的扩展的警告。
如果两个字符串都为空,则:
[ $str1 != $str2 ]
...评估为...
[ != ]
...这是对字符串!=
是否为非空的测试,这是真的。将您的代码更改为:
[ "$str1" != "$str2" ]
......和这些字符串的准确值实际上将通过传递给该[
命令。
另一种选择是使用[[
; 如BashFAQ #31和bash-hackers' wiki 上的条件表达式页面所述,这是扩展的 shell 语法(在 ksh、bash 和其他扩展 POSIX sh 标准的常见 shell 中),它抑制了让您绊倒的字符串拆分行为向上:
[[ $str1 != "$str2" ]]
...仅在右侧需要引号,即使是空字符串情况也不需要引号,但要防止右侧被视为全局(导致比较始终反映匹配如果str2='*'
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句