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