条件付きで引数をスクリプトに渡す

条件付きで引数をスクリプトに渡す

いくつかのパラメータを受け入れる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"}

ここでの値は、condnullでない場合(値がnullかどうcond=falseかに関係なく)拡張されます。これは配列ほど見苦しくはありませんが、引用符の配置に注意してください。cond=0cond=truep2

また見なさい:

おすすめ記事