加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:09:25 所属栏目:安全 来源:网络整理
导读:我看过使用测试命令和[]或[[]]的脚本。但是我们何时需要使用/ usr / bin / test和(())? 有什么场合,当我们需要为后者? 问候, 约翰 回答你的问题: 当你不信任你正在使用的shell的测试内置函数,或者当你需要测试某些东西,但是不想为它调用一个shell时,
我看过使用测试命令和[]或[[]]的脚本。但是我们何时需要使用/ usr / bin / test和(())?

有什么场合,当我们需要为后者?

问候,
约翰

回答你的问题:

>当你不信任你正在使用的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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读