if ステートメントに基づく Bash フラグ

if ステートメントに基づく Bash フラグ

以下では、複数のフラグを使用して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

しかし、この計画は施行後には実行されなかった。目的の結果を得るには何を使用できますか?

ベストアンサー1

配列でコマンドを作成できます。

#!/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"):)

関連する、あまり醜い方法と失敗する可能性がある方法:


ここに示すように、オプションのパラメータがある単純な場合は、代替値に拡張できます。

var=x
myscript ${var:+"-a"} -b 76

ここに${var:+foo}空でない場合は挿入し(つまり、が挿入されます)、空であるか設定されていない場合(、または)何も挿入しません。一般的な引用の問題に注意してください。foovarvar=ONvar=FALSEvar=xvar=unset var

おすすめ記事