gpt4 book ai didi

shell - 什么时候使用(())或者/usr/bin/test

转载 作者:行者123 更新时间:2023-12-02 18:24:20 25 4
gpt4 key购买 nike

我见过使用 test 命令和 [ ][[ ]] 的脚本。但是什么时候我们需要使用 /usr/bin/test(( )) 呢?

在某些情况下我们需要选择后者吗?

问候,约翰

最佳答案

回答您的问题:

  • 您想使用/usr/bin/test当你想要 test但不在 shell 中的东西(例如 find ... -exec test ... )
  • 您想使用(( ))当你有一个算术表达式需要解决,并且你正在使用 bash,因为 (( ))是 bash 特定的。

现在了解一些背景:

命令/usr/bin/test POSIX 要求标准。 POSIX 还要求[被定义为 test 的别名。 test 之间唯一的区别和[[要求最终参数为 ] .

test在 shell 脚本中使用如此频繁,大多数 shell 都有一个内置版本 test (和[)。内置的优点是它避免了 context switches 。哪个,取决于你如何使用test在您的脚本中,可以成为可衡量的性能优势。

我认为可以肯定地假设,在大多数情况下,您是否使用系统并不重要 test或者 shell 的内置 test 。但如果你想使用testfind -exec那么当然你必须使用系统test因为find无法使用 shell test .

(( ))[[ ]]由 bash(也许还有其他一些 shell)引入为 syntactic sugar(( ))计算算术表达式,而 [[ ]]计算逻辑表达式。两者都允许您以“更自然的语法”编写表达式。

决定使用[[[取决于您是否想使用“更自然的语法”,并且,由于 sh 不支持 [[ ,是否要依赖 bash。

决定使用(( ))取决于您是否需要算术表达式,同样,因为 sh 不支持 (( )) ,是否要依赖 bash。 (( )) 的 POSIX 替代方案是 $(( )) 。请注意,行为上存在一些细微的差异。

以下链接详细解释了这些主题:

另请参阅:

奖励:一些 Debian 开发者曾经争论过他们是否应该使用该系统 test或 shell 内置 test ,由于内置 test 的实现存在一些差异。如果您对系统差异的详细信息感兴趣test和 shell 内置 test那么你可以在这里阅读 debian 开发者讨论:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267142 .

关于shell - 什么时候使用(())或者/usr/bin/test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6534891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com