&& 和 || 之后的 bash 行延续在哪里有记录吗?

&& 和 || 之后的 bash 行延续在哪里有记录吗?

我在脚本中经常看到这种构造并自己使用它,但令我困扰的是我似乎无法在文档中找到它。

例子:

[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."

这也可以在换行符之前使用反斜杠来完成,如以下所述man bash

If a \<newline> pair appears,  and  the  backslash  is  not
itself  quoted,  the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).

例子:

[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."

……但这似乎没有必要。即使没有反斜杠,上面的第一个版本也可以工作。

我在哪里可以找到这个man bash? (另外,这是bash特定的还是 POSIX 兼容的?)

答案1

在一些明显存在未终止命令的上下文中,换行符会被忽略。这些上下文包括在控制运算符之后(&&, ||, |, &, ;, ;;,但不包括!)。

我没有在 bash 手册中看到这一点。

在 POSIX 中,它是通过语法规则。无论规则中有linebreak,都可以有零个或多个换行符。

相关内容