我什么时候应该在 Bash 中使用 [ vs [[ (单括号和双括号)?

Jho*_*han 9 bash posix

可能的重复:
使用单括号或双括号 - bash

什么时候应该使用单个支架? [

什么时候应该使用双括号? [[

两者都符合 POSIX 标准吗?

Ran*_*832 6

单括号是传统形式,通常作为外部命令实现。双括号是 bash(以及 ksh 和 zsh)扩展,不在POSIX 中,并且具有语法更清晰(见下文)和不使用单独进程的优点。

语法差异之一是<and>运算符(注意:不是标准 POSIX)不需要转义或引用以避免作为重定向运算符读取。此外,[如果其中一个字符串可能为空或以连字符开头,则需要一些技巧。这就是为什么您会看到脚本执行类似操作,[ "x$ASD" == xValue ]而使用 bash 他们可以简单地使用[[ $ASD == Value ]]. 请注意,对于符合 POSIX 标准的命令仅测试一件事,“x”技巧并不是绝对必要的,有关它的更多详细信息,请参阅此问题

bash FAQ提供了有关差异的更多信息。这也在另一个堆栈交换站点上得到了回答

  • `[` 没有 `&lt;` 或 `&gt;` 运算符。如果是,则它是不可移植的外壳扩展。POSIX `[` 也不需要 `x$var` 解决方法 - 对于具有奇怪解析怪癖的古老实现可能需要它,但是 POSIX `[` 定义非常好,最多可包含 4 个参数。 (2认同)

jw0*_*013 6

POSIX 中只有[( test) 。[[除了作为实现可能使用的保留字之外,您不会在 POSIX 中找到指定的内容。Bash 确实用作[[增强的测试操作符,如果您正在编写专门针对 的脚本bash,请始终使用它[[,因为它比它更强大[并且使用起来也更安全。但是,如果您的目标是 POSIX sh,则需要使用[,并确保引用参数并且不要使用超过 4 个参数[


归档时间:

查看次数:

2610 次

最近记录:

4 年,8 月 前