有什么场合,当我们需要为后者?
问候,
约翰
>当你不信任你正在使用的shell的测试内置函数,或者当你需要测试某些东西,但是不想为它调用一个shell时,你想使用/ usr / bin / test。
>你想使用(()),当你有一个算术表达式来解决,而你正在使用bash,因为(())是具体的bash。
现在有一些背景:
POSIX标准要求命令/ usr / bin / test。 POSIX还要求[被定义为测试的别名。测试和[所需的最终参数为a]之间的唯一区别。
由于在shell脚本中经常使用测试,大多数shell都有一个内置版本的test(和[])。内置版本的优点是它消除了shell和test可执行文件之间的context switches。
我认为在大多数情况下,无论使用系统测试还是使用shell的内置测试(除了内建的性能优势),都是安全的。
(())和[[]]由bash(也许一些其他的shell)引入为syntactic sugar.(())计算算术表达式,而[[]]评估逻辑表达式。两者都允许您使用“更自然的语法”来编写表达式。
决定使用[[或[取决于是否要使用“更自然的语法”,而且,由于sh不支持[[,是否要依赖于bash]。
使用(())的决定取决于您是否需要算术表达式,而且由于sh不支持(()),您是否要依赖于bash。 (())的POSIX替代是$(())。请注意,行为有一些微妙的差异。
> http://mywiki.wooledge.org/BashFAQ/031(测试之间的差异,[和[[]
> http://mywiki.wooledge.org/ArithmeticExpression(let,(())和$(()))
> http://www.ibm.com/developerworks/library/l-bash-test/index.html(以上所有)
也可以看看:
> POSIX definition of test
> POSIX definition of $(( ))
奖金:一些debian开发人员曾经认为是否应该使用系统测试或者shell内置测试,因为内置测试的实现有一些差异。如果您对系统测试和shell内建测试的不同之处感兴趣,那么您可以在这里阅读debian开发者讨论:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267142。