Shell 语法:如何正确使用 \ 来换行?

Ser*_*nyy 78 bash shell-script

我曾经相信打破列表中线条的适当方法是

command1 && \
command2
Run Code Online (Sandbox Code Playgroud)

原来不是这样,一个不需要 \

$ [  $(id -u) -eq 1000  ] &&                                                   
> echo yes
yes
Run Code Online (Sandbox Code Playgroud)

|以同样的方式处理管道。

关于流水线和列表的 bash 手册页部分没有对此进行任何说明。因此,我的问题是:\打破长行的正确用法是什么?

cho*_*oba 95

如果该语句在没有继续的情况下是正确的,则需要使用\. 因此,以下内容无需反斜杠即可工作,因为您不能以 结束命令&&

echo 1 &&
echo 2
Run Code Online (Sandbox Code Playgroud)

在这里,您需要反斜杠:

echo 1 2 3 \
4
Run Code Online (Sandbox Code Playgroud)

或者

echo 1 \
&& echo 2
Run Code Online (Sandbox Code Playgroud)

否则,bash 会在处理完第一行后立即执行命令,而不会等待下一行。


sau*_*ure 32

我在一家大型 IT 公司的职业生涯中遇到的脚本风格指南之一要求我在 shellscript 中每行使用不超过 80 个字符,并在断行后缩进。另外,我必须在管道或 && 或 || 之前换行。喜欢 :

command1 \
  && command2 \
  || command3 \
  | command4
Run Code Online (Sandbox Code Playgroud)

目标是具有清晰的可读性。

  • +1。我倾向于使用@OleTange 提到的样式(至少对于长或复杂的命令)-但是您提到的样式具有明显的优势,即您只需查看行本身就可以看到它是哪种延续,您不不必也看上一行的结尾。好的。我不确定我是否喜欢它足以强迫自己改变我的习惯,但我喜欢它。 (5认同)
  • 我也这样做了,直到有人指出如果你把&&、||和|放在一边,你可以省略\ 上一行:更好的可读性。 (4认同)