如何用多行脚本格式化&&运算符的多种用法?

时间:2019-01-14 09:32:06

标签: bash conditional-statements multiline

我正在使用&&来链接命令(execute a command only if the previous command returned ok (0) code)。

但是我需要在许多命令(超过8个)上添加此条件,然后我的代码看起来非常丑陋(对于一个唯一的行来说太长了):

command 1 && command 2 && command 3 && command 4 && command 5 && command 6 && command 7 && command 8...

是否可以将&&用于多于一行?

command 1 
 && command 2
 && command 3
 && command 4
 && command 5
 && command 6
 && command 7
 && command 8
...

答案

按照@Kamil Cuk的建议,在每行末尾使用&&可以解决我的问题。但是只会跳过&&之后的行。我宁愿跳过其余所有内容。 但我同意-这个主张解决了这个问题。我们可以在每行的末尾使用&&在多行上应用条件。谢谢。

我测试了@iBug的建议。我发现了同样的问题,其他指令(不在列表中)仍在处理中。但是甚至最差使用\的结果是错误的:它执行第一个命令,然后打印命令2名称...

echo "A" \
echo "B" \
echo "YES"
--> A echo B echo YES

最后,@ Biffen找到了我使用的解决方案:set -e

  

-e如果简单命令以非零状态退出,则立即退出,除非          失败的命令是直到或while循环的一部分,是          if语句,是&&或||的一部分列表,或者命令的返回状态          正在使用!反转。 -o errexit

感谢大家的快速帮助。

关于, 尼古拉斯

2 个答案:

答案 0 :(得分:3)

反斜杠!

command 1 \
 && command 2 \
 && command 3 \
 && command 4 \
 && command 5 \
 && command 6 \
 && command 7 \
 && command 8 \
...
 && command n

当心,不要在 last 行上误加反斜杠!

答案 1 :(得分:3)

Bash知道&&要求有另一个命令,因此请将其放在换行符之前以避免反斜杠。

command 1 &&
command 2 &&
command 3 ... etc

这个问题听起来有些模糊,就像您应该使用其他东西一样。如果不是set -e,那么也许是make而不是普通的旧Shell脚本?