コマンドをビルドできるのは配列:
#!/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
ここで、${var:+foo}
は、var
の場合、foo
を挿入します。 div>は空ではありません(したがって、var=ON
、var=FALSE
、var=x
はすべてそれを挿入します) 、空または未設定の場合は何もありません(var=
またはunset var
)。通常の引用の問題に注意してください。
コメント