コマンドをビルドできるのは配列:
#!/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)。通常の引用の問題に注意してください。
コメント