Case ステートメント外の変数の代入

Case ステートメント外の変数の代入

多くの言語では、Caseステートメント内で変数の割り当てを複数回繰り返すのではなく、Case / Switchステートメントの結果を変数に割り当てることができます。 Bashシェルでも同様のことができますか?

color_code=$(case "$COLOR" in
  (red)    1;;
  (yellow) 2;;
  (green)  3;;
  (blue)   4;;
esac)

(または他のシェルから?)

ベストアンサー1

このvariable=$(...)設定は、すべてのコマンドの標準出力を取得し$(...)て割り当てますvariable。したがって、variable必要な方法で割り当てるには、その値を標準出力に送信する必要があります。これは、次のコマンドを使用して簡単に実行できますecho

color_code=$(case "$COLOR" in
  red)    echo 1;;
  yellow) echo 2;;
  green)  echo 3;;
  blue)   echo 4;;
esac)

bashこれは他のすべてのPOSIXシェルで機能します。

オプションの左括弧

POSIX 標準によれば、caseステートメントの開き括弧はオプションであり、以下も適用されます。

color_code=$(case "$COLOR" in
  (red)    echo 1;;
  (yellow) echo 2;;
  (green)  echo 3;;
  (blue)   echo 4;;
esac)

Gillesがコメントで指摘したように、すべてのシェルが$(...)これら2つの形式の組み合わせを許可するわけではありません。印象的に詳細な互換性表を参照してください。"$( )" コマンドを含む ")" に置き換え

おすすめ記事