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

Sna*_*Doc 6 scripting bash shell-script

在一些脚本中,我看到if条件语句写成:

if [ some_conditional_statement ]; then
    # do stuff
fi
Run Code Online (Sandbox Code Playgroud)

或者

[ some_conditional_statement ] && #do stuff
Run Code Online (Sandbox Code Playgroud)

第二个示例是否等效(仅当条件为真时才会执行 do stuff 部分),但仅当您只需要执行一个命令时才有用,例如:

[ -f "/path/to/some/file" ] && . /path/to/some/file
Run Code Online (Sandbox Code Playgroud)

还是我遗漏了另一个区别?

G-M*_*ca' 5

好的,我想你明白\n(或在 bash 中)\n 本质上是一个没有副作用的命令,\n但它评估条件并给出适当的退出状态。\xc2\xa0\n你提到了链接s一起。\xc2\xa0\n你可以这样做;[ condition ][[ condition ]]&&

\n
A  &&  B  &&  C\n
Run Code Online (Sandbox Code Playgroud)\n

相当于

\n
if A\nthen\n    if B\n    then\n        C\n    fi\nfi\n
Run Code Online (Sandbox Code Playgroud)\n

但你似乎在问怎么做

\n
if A\nthen\n    B\n    C\nfi\n
Run Code Online (Sandbox Code Playgroud)\n

你可以这样做

\n
A  &&  (B; C)\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
A  &&  { B; C;}\n
Run Code Online (Sandbox Code Playgroud)\n

笔记:

\n
    \n
  • 括号给你一个子shell;即,命令BC在子进程中运行。\xc2\xa0\n因此,\n像变量赋值或这样的命令cd对父 shell 没有影响。\xc2\xa0\n大括号中的命令与该A命令在同一进程中运行。
  • \n
  • 在大括号语法中,\n在,\xe2\x80\x82\n后面必须有一个空格,在\xc2\ 之前必须有一个(或\xc2\xa0an\xc2\xa0或\xc2\xa0a\xc2\xa0newline) xa0the\xc2\xa0 。{;&}
  • \n
\n

我的想法:

\n

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

\n


meg*_*lon 4

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

  • 我不会将 `&&` 视为 if 的替代语法,它确实是它看起来的样子,即“and”。例如,您可以这样做:`if echo && echo; 然后回显确定;fi`。它可以用作 if 语句的原因是短路。 (3认同)