我确定这已发布在某处,但我无法找到它。
在 Bash 中,如何在不创建子 shell 的情况下指定运算符优先级(也称为命令分组)?在大多数其他语言中都()
会这样做,但在 Bash 中,这会在“放弃”环境更改的子 shell 中运行命令。我想指定运算符优先级而不丢失环境更改。
具体来说,我想做这样的事情并让整个脚本退出,而不仅仅是以下中的子shell ()
:
die ()
{
echo "[DIE]: $1"
exit 1
}
# When installChruby returns an error, print the error message and exit
[[ $CHRUBY =~ [Yy] ]] && (installChruby || die "Error installing chruby")
我通过这样做找到了一种“解决方法”,但这并不像我想要的那样漂亮:
if [[ $CHRUBY =~ [Yy] ]]; then installChruby || die "Error installing Chruby"; fi
期望的结果是,如果未设置,则不执行任何操作并继续;如果是或,则CHRUBY
调用该函数,并且仅当该函数返回 false时才调用该函数。installChruby
CHRUBY
Y
y
die
installChruby
除了 之外,Bash 中是否还有一个运算符可以执行此操作()
,或者有没有办法告诉 中的代码()
不要在子 shell 中运行?
答案1
从man bash
:
{ list; }
list is simply executed in the current shell environment. list must be terminated with a newline or semicolon.
This is known as a group command. The return status is the exit status of list. Note that unlike the metachar‐
acters ( and ), { and } are reserved words and must occur where a reserved word is permitted to be recognized.
Since they do not cause a word break, they must be separated from list by whitespace or another shell metacharac‐
ter.