Bash - サブシェルを生成せずに演算子の優先順位を明確にする方法

Bash - サブシェルを生成せずに演算子の優先順位を明確にする方法

きっとどこかに投稿されたようですが見つかりませんね。

Bashでサブシェルを作成せずに演算子の優先順位(コマンドグループ化とも呼ばれる)をどのように指定しますか?これは他のほとんどの言語で実行されますが、()Bashは環境の変更を「削除」するサブシェルでコマンドを実行します。環境の変更を失うことなく演算子の優先順位を付けたいと思います。

特に、私は次のようにサブシェルだけでなく、次のようなスクリプト全体を終了したいと思います()

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でこれを行うことができる演算子はありますか?それとも、Bashのコードがサブシェルで実行されないように()指示する方法はありますか?()

ベストアンサー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.

おすすめ記事