Bashの実行行内のロード条件


1

変数の属性に依存するオプションを使用してコマンドを実行したい。変数が設定されている場合、オプションを値でロードしますが、そうでない場合はそのオプションをロードしないでください。これは私が持っているものです:

if [ -n "$variable" ]
  then command ... -option $variable
  else command ...
fi

これは、コマンドのその他のオプションを2回繰り返す必要がないように、これを条件付きの単一のコマンドにマージすることです。

ご清聴ありがとうございました。


私はあなたが受け入れたものよりも簡単な解決策を持っています、plsはそれを見てみましょう。乾杯。
MariusMatutiae

回答:


1

bash配列の使用:

opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"

これはbash配列を使用するため、$variable空白やその他の難しい文字が含まれていても機能します。

使い方

  • opts=()

    これにより、という空の配列が作成されoptsます。

  • [ "$variable" ] && opts+=(-option "$variable")

    場合は$variable空ではありません、我々は追加-optionして$variable、アレイにopts

  • command ... "${opts[@]}"

    これにより、コマンドが実行されます。場合はopts非空で、その要素は、コマンドに追加されます。optsが空の場合、何も追加さ"${opts[@]}"れません。あたかもまったく存在しないかのようになります。


ありがとう!それは魅力のように働いた。好奇心だけのために、「@」は何を表していますか?
フアン

@Juan喜んでくれた。@中には、${opts[@]}それぞれの要素を拡大するためのbash告げるopts別の単語にします。
John1024

0

次に、コマンドを受け取り、次のような関数にします。

function command_function () {
  command ... -option $variable
}

if [ -n "$variable" ]
  then command_function ... -option $variable
  else command_function ...
fi

Bash関数の括弧が何も渡さないことを知っているだけです。



0

次のワンライナーでできます:

[ x"$VARIABLE" = x ] && echo UNSET || echo SET

これは、変数x "$ VARIABLE"xに等しいかどうか、つまり$ VARIABLEが空の場合にテストします。テストが満たされた場合、最初のオプション(echo UNSET)が実行され、テストが満たされない場合、最後のオプションが実行されます(echo SET)。2番目のケースで何もしたくない場合は、次のことができます。

[ x"$VARIABLE" = x ] && echo UNSET || :

これは、他のソリューションよりもかなり単純で、条件の評価を1回だけ可能にし、VARIABLEに現れる奇妙な文字に対して堅牢です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.