"if"条件下[]和()之间的差异

Ver*_*ion 5 bash shell

有人可以解释我或者指出一些文件,其中"if()......"和"if [] ......"之间的区别可以澄清吗?

nne*_*neo 13

if简单地将普通的shell命令作为参数,并评估命令的退出代码.例如,你可以做到

if grep pattern file; then ...; fi
Run Code Online (Sandbox Code Playgroud)

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

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

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


Col*_*nic 6

[符号实际上是一个命令。它等效于test命令。

例如

if test "$foo" = 'bar'; then ...
Run Code Online (Sandbox Code Playgroud)

是相同的

if [ "$foo" = 'bar' ]; then ...
Run Code Online (Sandbox Code Playgroud)

而在子shell中if (command)执行command