我在脚本中经常看到这种构造并自己使用它,但令我困扰的是我似乎无法在文档中找到它。
例子:
[ -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
,都可以有零个或多个换行符。