gaa*_*kam 0 string bash string-comparison
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$
Run Code Online (Sandbox Code Playgroud)
WTF正在这里?
我是如何编写以上代码的:谷歌搜索“ bash比较字符串”使我进入了该网站,其中说:
您可以使用if语句检查bash中两个字符串的相等和不相等。“ ==”用于检查是否相等,“!=”用于检查字符串的不平等。
但是我得到了以上吗?
我不明白什么?我究竟做错了什么?
您根本不需要进行比较,因为您没有在必须使用引号的地方使用引号。请参阅来自http://shellcheck.net/的关于SC2086中未引用的扩展的警告。
如果两个字符串都为空,则:
[ $str1 != $str2 ]
Run Code Online (Sandbox Code Playgroud)
...评估为...
[ != ]
Run Code Online (Sandbox Code Playgroud)
...测试字符串!=是否为非空,这是正确的。将您的代码更改为:
[ "$str1" != "$str2" ]
Run Code Online (Sandbox Code Playgroud)
......和这些字符串的准确值实际上将通过传递给该[命令。
另一种选择是使用[[;如BashFAQ#31和bash-hackers Wiki上的条件表达式页面中所述,这是扩展的Shell语法(在ksh,bash和其他扩展POSIX sh标准的通用shell中),可以抑制触发您的字符串拆分行为上:
[[ $str1 != "$str2" ]]
Run Code Online (Sandbox Code Playgroud)
...只需要在右手边加上引号,即使在空字符串情况下也不需要,但为了防止将右手边视为引号(使比较始终反映匹配项如果str2='*')。