28

想象一下代码:

ls || echo "Unable to execute ls (returned non zero)"

如果我需要执行更多命令,例如:

ls || echo "this is echo 1" <some operator> echo "this is echo 2" <some operator> exit 1

在 C 中(假设我有一个函数ls)我可以做(即使它看起来很疯狂):

ls() || (command1() && command2());

但我怀疑我可以在 bash 中使用这样的括号。

我知道我可以创建一个包含这些命令的 Bash 函数,但是如果我需要将它与exit 1(函数中的退出将退出该函数,而不是整个脚本)结合起来怎么办?

4

2 回答 2

47

您可以{ }. 说:

some_command || { command1; command2; }

将执行command1command2如果some_command以非零返回码退出。

{}

{ list; }

在大括号之间放置一个命令列表会导致该列表在当前 shell 上下文中执行。没有创建子shell。列表后面的分号(或换行符)是必需的。

于 2013-11-06T08:35:14.433 回答
15

事实上,您可以使用括号。他们只是告诉 bash “在子 shell 中运行命令”。您还可以使用卷曲:

ls || { echo 1 ; echo 2 ; }

请注意,;结束 curlie 之前的换行符或换行符不是可选的。

于 2013-11-06T08:36:03.807 回答