次のようにして、いくつかのフラグを持つbashスクリプトを呼び出しています。
/home/username/myscript -a -b 76
つまり、-aフラグはmyscriptで何かを行い、-bフラグはmyscriptでいくつかのパラメーターを76に設定します。
以前に定義した変数に基づいてこれらのフラグを条件付きにするにはどうすればよいですか?たとえば、ある変数var = ONの場合にのみ-aフラグを使用します。それ以外の場合は、そのフラグを使用する必要はありません。私は次のようなものを探しています:
var=ON
/home/username/myscript
if [ "$var" == "ON" ]; then
-a
fi
-b 76
ただし、このスキームは実装時に機能しませんでした。望ましい結果を達成するために何を使用できますか?
コマンドは配列で作成できます。
_#!/bin/bash
var=ON
cmd=( /home/username/myscript ) # create array with one element
if [ "$var" == "ON" ]; then
cmd+=( -a ) # append to the array
fi
cmd+=( -b 76 ) # append two elements
_
そして、それを実行します:
_"${cmd[@]}"
_
最後の部分を囲む引用符と、上記の割り当てを囲む括弧に注意してください。構文は醜いですが、空白などを含む引数に直面しても機能します。 (スペースを含む引数を追加するには引用符を使用します。例:cmd+=("foo bar")
)
関連する、醜くない方法と失敗する方法:
単純なケースでは、ここでの1つのオプションの引数のように、代替の値展開で回避できます。
_var=x
myscript ${var:+"-a"} -b 76
_
ここで、foo
が空でない場合、_${var:+foo}
_はvar
を挿入します(つまり、_var=ON
_、_var=FALSE
_、_var=x
_はすべて挿入します)。空または未設定の場合は何もありません(_var=
_、または_unset var
_)。通常の引用問題に注意してください。
私があなたを正しく理解している場合:
var=ON
if [ "$var" = "ON" ]; then
/home/username/myscript -a -b 76
else
/home/username/myscript -b 76
fi