きっとどこかに投稿されたようですが見つかりませんね。
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を返す場合にのみ関数を呼び出すことです。installChruby
CHRUBY
Y
y
die
installChruby
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.