【发布时间】:2016-07-14 07:01:12
【问题描述】:
我一直在编写 Bash 脚本,我想知道这两种形式的否定与 test 命令之间是否有任何区别:
if [ ! condition ]; then
fi
if ! [ condition ]; then
fi
第一个告诉 shell 传递参数! condition 进行测试,让程序自己处理否定。另一方面,第二个通过condition 进行测试并让shell 本身否定错误代码。
在这两种形式之间进行选择时,我应该注意哪些陷阱? $condition 的哪些值会使它们之间的结果不同?
(我似乎记得不久前读过一篇讨论这个问题的文章,但我不记得如何找到它/到底讨论了什么。)
【问题讨论】:
-
并不是一个真正的陷阱,因为很难构建一个会发生这种情况的现实场景,但请记住,在
! [ condition ]中,!是一个 shell 运算符,否定了退出状态命令,而在[ ! condition ]中,!只是[命令的字符串参数。在foo="! bar"之后,比较[ "$foo" ]和[ $foo ]。
标签: linux bash shell unix terminal