【发布时间】:2015-08-31 21:23:14
【问题描述】:
如果我不关心兼容性或可移植性问题,我是否还需要在 Bash 中使用测试构造 [...]?
许多教程/书籍告诉[[...]] 比[...] 更好、更灵活,例如[[...]] 支持 glob/regex,但今天我仍然看到很多人更喜欢使用 [...] 作为标准形式。
这背后的原因是什么?什么[...]可以做而[[...]]不能做?
【问题讨论】:
-
[...]可能会导致错误,如果您不使用正确的空格并正确引用参数扩展,[[ ... ]]不会。否则,它仅用于保持 shell 脚本的可移植性。 -
[是(更像)一个普通命令,与任何其他命令具有相同的参数解释。[[命令对参数的解释与其他命令不同。如果您不介意围绕处理参数的不同方式绞尽脑汁,请使用[[。你会相处得很好——见证前面的评论。但是[使用与任何其他命令相同的符号,因此它比[[更易于使用。 -
当我开始学习 Bash 时,几种形式的测试构造让我很困扰,我总是使用 Bash 作为我项目的胶水代码,我只需要一个不关心可移植性的最佳解决方案/兼容问题。顺便说一句,关于
[..]的任何重要说明请在下面回答我。 -
我看到人们使用
[犯的大多数错误让我认为他们正在对其应用第三组规则,这些规则不适用于[[或普通命令。如果有的话,如果你打算使用它,我建议只使用名称test。 -
当可移植性不是问题时,普遍接受的智慧是“使用
[[”。可移植性对我来说是个问题,而且我从事 shell 编程已经有很长时间了——我更喜欢[,因为它对我来说使用起来更简单,因为它“只是一个没有特殊情况的常规命令”(这也不是确实如此,但特殊情况并没有给我带来问题,因为我在 30 年前将这些问题内化了)。你的选择,但如果你真的确定便携性不是问题,那么可能会选择[[。
标签: bash if-statement conditional-statements