什么时候不需要“如果”?

什么时候不需要“如果”?

在某些脚本中,我看到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;即命令BC在子进程中运行。因此,诸如变量赋值或之类的命令cd不会对父 shell 产生任何影响。大括号中的命令与该命令在同一进程中运行A
  • 在大括号语法中,有必须后面有一个空格{,并且有必须是之前的 ;(或 换行符) 。&}

我的想法:

我强烈建议使用if--语法,以提高可读性。thenelse

答案2

if 子句将执行之间的任何内容,then并且fi如果后面的表达式if为 true,这在 shell 术语中意味着其退出值为零。您可以使用命令或括号(只是test命令的缩写形式)。该a && b结构的意思是:“评估 a,如果为真,也评估 b”。因此,您的两个示例是等效的,但 if 子句更具可读性,并且可用于对多个命令进行分组。

相关内容