Nic*_*IEA 2 bash multiline conditional-statements
我正在使用&&链接命令(仅当前一个命令返回 ok (0) 代码时才执行命令)。
但我需要在许多命令(超过 8 个)上添加此条件,然后我的代码看起来非常难看(对于一个唯一的行来说太长):
command 1 && command 2 && command 3 && command 4 && command 5 && command 6 && command 7 && command 8...
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以使用&&多条线?
command 1
&& command 2
&& command 3
&& command 4
&& command 5
&& command 6
&& command 7
&& command 8
...
Run Code Online (Sandbox Code Playgroud)
回答
正如 @Kamil Cuk 所提议的,在每行末尾使用 && 可以解决我的问题。但只会跳过 && 后面的行。我宁愿跳过其余的一切。但我同意——这个提议解决了问题。我们可以在每行末尾使用 && 在多行上应用条件。谢谢。
我测试了@iBug 的提案。我观察到同样的问题,其他指令(列表之外)仍在处理。但最糟糕的是,使用 \ 的结果是错误的:它执行第一个命令,然后打印命令 2 名称...
echo "A" \
echo "B" \
echo "YES"
--> A echo B echo YES
Run Code Online (Sandbox Code Playgroud)
最后,我使用的解决方案是@Biffen找到的:set -e
-e 如果简单命令以非零状态退出,则立即退出,除非失败的命令是 Until 或 while 循环的一部分、if 语句的一部分、 && 或 || 的一部分 列表,或者如果使用 ! 反转命令的返回状态。-o 错误退出
感谢大家的快速帮助。
问候,尼古拉斯
Bash 知道这&&需要另一个命令,因此将其放在换行符之前以避免反斜杠。
command 1 &&
command 2 &&
command 3 ... etc
Run Code Online (Sandbox Code Playgroud)
不过,这个问题听起来模糊地像是您应该使用其他东西来代替。如果不是,set -e那么也许make可以用普通的旧 shell 脚本来代替?