2017-03-23 18 views
3

環境変数$ VERBOSEが定義されているかどうかによって、-vフラグの有無にかかわらず、bashスクリプト内でコマンドを実行したいとします。このような何か:VERBOSEが設定され、非空の場合条件付きでシェルスクリプトにフラグを追加するには?

#!/bin/bash 

/usr/local/bin/mongo-connector \ 
    -m $MONGO_HOST \ 
    -t $NEO_URI \ 
    [if $VERBOSE then -v ] \ 
    -stdout 

答えて

7
#!/bin/bash 

/usr/local/bin/mongo-connector \ 
    -m $MONGO_HOST \ 
    -t $NEO_URI \ 
    ${VERBOSE:+-v} \ 
    -stdout 

、そして${VERBOSE:+-v}-vに評価されます。 VERBOSEが設定されていないか空の場合、空の文字列に評価されます。これは、二重引用符を使用しないでください。 cmd ${VERBOSE+:v}ではなくcmd "${VERBOSE:+-v}"と記述すると、VERBOSEが空であるか設定が解除されている場合の動作が意味的に異なります。前者の場合、cmdは1つの引数(空文字列)で呼び出されますが、後者の場合はcmdが引数なしで呼び出されます。

+0

はい、ただし、$ VERBOSEが特定の値に設定されているかどうかを確認する方法はありますか?ありがとう –

+1

特定の値をチェックする場合は、明示的に比較を行う必要があります。例えば、 'case'ステートメントです。簡単なショートカットはありません。 –

3

読みやすくするために、配列を使用して引数を格納することを検討してください。

args=(
    -m "$MONGO_HOST" 
    -t "$NEO_URI" 
    -stdout 
) 
if [[ -v VERBOSE ]]; then 
    args+=(-v) 
fi 
/usr/local/bin/mongo-connector "${args[@]}" 
関連する問題