いくつかのパラメータを受け入れるLinux上で実行されるスクリプトがあります。
私はこのようなことをしたい:
if [[ $CONDITION == "true" ]]; then
script param1 --param2
else
script param1
fi
ifの分岐経路を避けたい。
2番目のパラメータを渡すより最適化された方法はありますか?
ベストアンサー1
おそらく最もスケーラブルで強力なアプローチは、オプションのパラメータを保持するために配列を使用することです。
params=()
if [[ $CONDITION == true ]]; then
params+=(--param2)
fi
script param1 "${params[@]}"
または、次のように短縮されます。
[[ $CONDITION == true ]] && params+=(--param2)
script param1 "${params[@]}"
これにより、コマンドの定数部分が重複するのを防ぎ、配列に複数のパラメータを入れたり、コマンド全体を入れたりすることができます。
配列を使用してこれを行うことが重要です。配列を一般変数()に置き換える場合は、params="--param2"; script param1 $params
変数を引用符なしで拡張してすべての問題を取得するか、引用符で拡張する必要があります。この場合、以下が必要です。変数が空の場合、空の文字列は引数として渡されます。
このような単純なケースでは、「代替値」拡張を使用することもできます。
cond=x
p2="--param2"
script param1 ${cond:+"$p2"}
ここでの値は、cond
nullでない場合(値がnullかどうcond=false
かに関係なく)拡張されます。これは配列ほど見苦しくはありませんが、引用符の配置に注意してください。cond=0
cond=true
p2
また見なさい: