Bash “”中[]和()之间的差异;如果;条件

Bash “”中[]和()之间的差异;如果;条件,bash,shell,Bash,Shell,有人能给我解释一下,或者给我指出一些可以澄清“if()…”和“if[…”之间区别的文档吗?if只是将普通shell命令作为参数,并计算命令的退出代码。例如,你可以 if grep pattern file; then ...; fi bash中的()执行子shell中的内容,因此基本上可以指定子shell中的任何命令 bash中的[]是一个shell命令(技术上称为[命令),它根据特定语法计算表达式 因此,if(…)用于测试命令的退出代码(在大多数情况下,()是冗余的),而if[…]用于使用t

有人能给我解释一下,或者给我指出一些可以澄清“if()…”和“if[…”之间区别的文档吗?

if
只是将普通shell命令作为参数,并计算命令的退出代码。例如,你可以

if grep pattern file; then ...; fi
bash中的
()
执行子shell中的内容,因此基本上可以指定子shell中的任何命令

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


因此,
if(…)
用于测试命令的退出代码(在大多数情况下,
()
是冗余的),而
if[…]
用于使用
test
语法测试表达式,
[
符号实际上是一个命令。它相当于
test
命令

比如说

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

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

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

()用于指定函数,[]用于测试条件/评估..下面是另一个已经回答过的问题:@NSD,
()
在这个上下文中,将用于在子shell中运行命令管道,并且
if
将对退出状态起作用。好的,根据你的最后一句话,你能解释一下为什么它不起作用吗?我的意思是,在“crontab-l>/dev/null 2>&1”之后,$是1。如果(crontab-l>/dev/null 2>&1);然后回显“有安排的事情”或者回显“没有什么预定的”这只是一个逻辑错误!谢谢