我已经看到了使用脚本test命令[ ]或[[ ]].但是,当我们需要使用/usr/bin/test和(( ))?
有什么时候我们需要去后者吗?
问候,约翰
les*_*ana 20
回答你的问题:
/usr/bin/test时候使用test但不想在shell中使用(例如find ... -exec test ...)(( ))在你有一个算术表达式来解决时使用,并且你正在使用bash,因为它(( ))是特定于bash的.现在有一些背景知识:
该命令/usr/bin/test是POSIX标准所必需的.POSIX还要求将[其定义为别名test.test和之间的唯一区别[是[需要最终参数为a ].
由于test在shell脚本中经常使用,因此大多数shell都有内置版本的test(和[).内置版本的优点是它消除了shell和可执行文件之间的上下文切换test.
我认为可以安全地假设在大多数情况下使用系统test或shell的内置并不重要test(除了内置的性能优势).
(( ))并[[ ]]通过bash的(也许还有一些其他的shell)的介绍语法糖.(( ))评估算术表达式,同时[[ ]]评估逻辑表达式.两者都允许您以"更自然的语法"编写表达式.
决定使用[[或[依赖于是否要使用"更自然的语法",而且,因为SH不支持[[,你是否要依赖于庆典.
使用的决定(( ))取决于你是否需要算术表达式,再次,因为sh不支持(( )),你是否想要依赖bash.POSIX替代方案(( ))是$(( )).请注意,行为中存在一些细微差别.
以下链接非常详细地解释了这些主题:
test,[和[[)let,(( ))和$(( )))也可以看看:
奖金:一些Debian开发人员曾经认为他们是否应使用系统test或shell内建test,因为在内置的实施一定的差异test.如果您对系统test和内置shell 的不同之处感兴趣,test那么您可以在这里阅读debian开发者讨论:http://bugs.debian.org/cgi-bin/bugreport.cgi?video = 267142.
(( ))评估bash(参见man bash)中的算术表达式.
[[ ]]评估bash(参见man bash)中的逻辑表达式.
[ ]与test用于检查文件类型和比较值(请参阅参考资料man test)相同.