shell – 你什么时候使用(())或/usr/bin/test

前端之家收集整理的这篇文章主要介绍了shell – 你什么时候使用(())或/usr/bin/test前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看过使用测试命令和[]或[[]]的脚本。但是我们何时需要使用/ usr / bin / test和(())? @H_404_1@有什么场合,当我们需要为后者?

@H_404_1@问候,
约翰

回答你的问题: @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 test
> POSIX definition of $(( ))

@H_404_1@奖金:一些debian开发人员曾经认为是否应该使用系统测试或者shell内置测试,因为内置测试的实现有一些差异。如果您对系统测试和shell内建测试的不同之处感兴趣,那么您可以在这里阅读debian开发者讨论:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267142

原文链接:/bash/387492.html

猜你在找的Bash相关文章