防止 BASH 中的大括号创建子外壳

jav*_*top 4 linux bash shell braces

我需要大括号来指定表达式的计算优先级,但我不希望大括号创建子脚本。看看当示例代码运行时会发生什么:

示例脚本

#!/bin/bash

false || (echo "First" && exit 1)
false || (echo "Second" && exit 2)
exit 3
Run Code Online (Sandbox Code Playgroud)

输出

First
Second
Run Code Online (Sandbox Code Playgroud)

似乎大括号创建子脚本,其中退出不会导致主脚本退出。

做我想做的最优雅的方式是什么?最好没有块和嵌套。谢谢!

gle*_*man 9

这些()是括号,它们启动一个子shell

这些{}是大括号,它们用于在当前 shell 中进行分组。exit将退出您的脚本。

注意空格要求更严格({后面需要跟空格;}前面需要分号加空格,或者换行)

false || { echo foo; echo bar; }     # this is OK
false || {echo foo; echo bar}        # not OK
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅手册中的分组命令