这个bug说大不大,说小不小,但是很烦人。第一天写shell就搞出这种问题来……其实说穿了还是shell对空格的要求很高。接触的上一个对空格要求这么高的语言是Python,那个就不谈了。
环境是RHEL8。具体情况是这样的:
[ 'abcd'!='abcd' ]
echo $?
# 0
理论上应该输出1(假)才对,这两个字符串明明是完全相同的。一开始我觉得是不是堆引用的问题,比如字符串常量引用了堆里的不同位置,后来想起来好像Shell里没堆的概念……那肯定不是这个问题了。
后来发现,shell里的命令和变量对空格的要求是不一样的。命令周围必须有空格。比如,上面的代码应该改成这样:
[ 'abcd' != 'abcd&