シェルスクリプト:環境変数が定義されている場合にのみenv変数の前にプレフィックスを付ける方法は?

シェルスクリプト:環境変数が定義されている場合にのみenv変数の前にプレフィックスを付ける方法は?

commandこれにはフラグが必要であると仮定します--flag。その値が環境変数として提供されている場合にのみ、このフラグを挿入しようとしますVALUE

私は以下を試しました:

echo "command ${X+--flag ${VALUE}}"
VALUE=1
echo "command ${X+--flag ${VALUE}}"'

引用:

答え1

command ${VALUE:+--flag "$VALUE"}

変数が定義され、nullでない場合は、commandオプション--flagとそのオプション引数を使用して実行されます。変数が空であるか定義されていない場合は、引数なしで実行されます。"$VALUE"VALUEcommand

zshシェルは引用符のない拡張ではトークン化を実行しないため、SH_WORD_SPLITシェルオプション()を設定するか、互換モード()でシェルを実行するか、setopt SH_WORD_SPLIT次を使用する必要があります。shzsh --emulate sh

command ${=VALUE:+--flag "$VALUE"}

...null以外の値に設定され、2つの別々の引数に渡されることを保証--flagします"$VALUE"VALUE

定義されているが空のオプションを追加するには、:パラメーター置換を削除します。--flagVALUE

関連情報