Bash - 如何在不创建子 shell 的情况下明确运算符优先级

Bash - 如何在不创建子 shell 的情况下明确运算符优先级

我确定这已发布在某处,但我无法找到它。

在 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时才调用该函数。installChrubyCHRUBYYydieinstallChruby

除了 之外,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.

相关内容