为何bash这个判断有输出?

if [[ ''=1 ]] ; then echo "haha"; fi
haha

这个bash为何输出 haha呢?

''=1 会报错, 为何会进入这个条件判断呢?

阅读 2.1k
2 个回答

因为[[…]]是一个内建运算符,虽然不是所有的shell都支持,所以有些原本的运算符都不具有原来的意义。比如>表示大于而不是重定向,=的意义是==表示”模式匹配“等等。

另外,bash里并不像在大多数计算机语言里一样,bash里字符串是不一定需要加引号的,只有包含空格的字符串才需要加(因为空格表示分隔符)。而且bash里默认是字符串。于是if [[ ''=1 ]] 的意思是if [[ 非空字符串 ]],所以就是 if 1

$ if [[ '1' == 1 ]] ; then echo "true"; else echo "false"; fi
true
$ if [[ ''=1 ]] ; then echo "true"; else echo "false"; fi
true
$ if [[ '' = 1 ]] ; then echo "true"; else echo "false"; fi
false
$ if [[ '' =1 ]] ; then echo "true"; else echo "false"; fi
bash: 需要二元条件运算符
bash: `=1' 附近有语法错误

https://www.gnu.org/software/...

等号两边缺空格。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进