关于bash:“if”条件下[]和()之间的差异

Differences between [] and () in an “if” condition

本问题已经有最佳答案,请猛点这里访问。

有人能给我解释一下,或者给我指出一些文件,说明"如果()…"和"如果[……"之间的区别,好吗?


if只需要一个普通的shell命令作为参数,并计算该命令的退出代码。例如,您可以

1
if grep pattern file; then ...; fi

bash中的()执行子shell中的内容,因此基本上可以指定子shell中的任何命令。

bash中的[]是一个shell命令(技术上是[命令),它根据特定的语法来计算表达式。

因此,if (...)用于测试命令的退出代码(在大多数情况下,()是多余的),而if [...]用于使用test的语法测试表达式。


[符号实际上是一个命令。它相当于test命令。

例如

1
if test"$foo" = 'bar'; then ...

1
if ["$foo" = 'bar' ]; then ...

鉴于,if (command)在子shell中执行command