在某些脚本中,我看到if
条件语句写为:
if [ some_conditional_statement ]; then
# do stuff
fi
或者
[ some_conditional_statement ] && #do stuff
第二个示例是否等效(do stuff 部分仅在条件为真时执行),但仅在您只需要执行一个命令时有用,例如:
[ -f "/path/to/some/file" ] && . /path/to/some/file
或者我还缺少其他区别吗?
答案1
好的,我想您明白 (或在 bash 中)本质上是一个没有副作用的命令,但它会评估条件并给出适当的退出状态。您提到了将s 链接在一起。你可以这样做;[ condition ]
[[ condition ]]
&&
A && B && C
相当于
if A
then
if B
then
C
fi
fi
但你似乎在问怎么做
if A
then
B
C
fi
你可以这样做
A && (B; C)
或者
A && { B; C;}
笔记:
- 括号给你一个子shell;即命令
B
并C
在子进程中运行。因此,诸如变量赋值或之类的命令cd
不会对父 shell 产生任何影响。大括号中的命令与该命令在同一进程中运行A
。 - 在大括号语法中,有必须后面有一个空格
{
,并且有必须是之前的;
(或 换行符) 。&
}
我的想法:
我强烈建议使用if
--语法,以提高可读性。then
else
答案2
if 子句将执行之间的任何内容,then
并且fi
如果后面的表达式if
为 true,这在 shell 术语中意味着其退出值为零。您可以使用命令或括号(只是test
命令的缩写形式)。该a && b
结构的意思是:“评估 a,如果为真,也评估 b”。因此,您的两个示例是等效的,但 if 子句更具可读性,并且可用于对多个命令进行分组。