if else 语句在一行中使用 && 和 ||

use*_*282 7 shell-script

我想知道这两种方式是否等效:

第一的:

#!/bin/bash
if [ -x $FILE ]
then
  echo "You have execution permission to a "$FILE""
else
  echo "You don't have execution permission to a "$FILE""
fi
Run Code Online (Sandbox Code Playgroud)

第二:

#!/bin/bash
[ -x $FILE ] && echo "You have execution permission to a "$FILE"" || echo "You don't have execution permission to a "$FILE""
Run Code Online (Sandbox Code Playgroud)

Hau*_*ing 7

这些结构通常不等效,但在这种情况下它们是等效的。原因是它echo总是有退出代码 0。如果那是一个可以以大于零的代码退出的命令,那么“另一个分支”也将被执行。在这种if情况下这是不可能的。

  • `if` 的情况也更具可读性。 (2认同)
  • @ user3014282:要详细说明 Hauke 的答案,`[ -e /tmp ] && { echo 1 ; 错误的 ; } || echo 2` 将同时打印 `1` 和 `2`。使用 `if ... then ... else ... fi` 重铸相同的内容只会打印 `1`。所以`&&` `||` 不是另一个的完全等价物。 (2认同)