複数の環境変数を単一の変数に割り当て、コマンドに基づいて拡張します。

複数の環境変数を単一の変数に割り当て、コマンドに基づいて拡張します。

コマンドを実行するさまざまな注文の前に、同じ環境変数文字列を繰り返したいとします。

if [[ some_thing ]]; then
    TZ=GMT LC_ALL=C LONG_ENV_VAR=foo my_command
elif [[ some_other_thing ]]; then
    TZ=GMT LC_ALL=C LONG_ENV_VAR=foo my_command --with-arg
else
    TZ=GMT LC_ALL=C LONG_ENV_VAR=foo my_command --with-other-arg
fi

それらを組み合わせる方法はありますか?いくつかのオプション

  1. それらを設定することでexport

    export TZ=GMT
    export LC_ALL=C
    export LONG_ENV_VAR=foo
    if [[ ]] # ...
    

    これは機能しますが、環境に設定された状態を維持したくありません。

  2. 変数変数を作ろう!

    local cmd_args="TZ=GMT LC_ALL=C LONG_ENV_VAR=foo"
    

    残念ながら、次のように実行しようとすると:

    $cmd_args my_command
    

    私は持っていますTZ=GMT: command not found

  3. 毎回すべてリストします。

私もグーグルをしてみましたが、「環境変数変数」は検索が最も簡単な用語ではなく、結果も出ませんでした。 #2で私がやろうとしていることに対する解決策はありますか?それとも#1のいくつかのバージョンに固執し、変数を設定解除する必要がありますか?

ベストアンサー1

これにはサブシェルを使用できます。

(
  export TZ=GMT LC_ALL=C LONG_ENV_VAR=foo
  if [[ some_thing ]]; then
    exec my_command
  fi
)

これにより、変数を一度明確に設定できます。サブシェルで実行されているすべての項目に表示され、デフォルトのシェル環境には表示されません。

おすすめ記事