コマンドの一部をbashで渡したいので、次のようにします。
commandpart=( --flags "filename" >/dev/null )
command "${commandpart[@]}"
次のように評価されます。
command --flags "filename" >/dev/null
これは以前はうまく機能していましたが、残念ながら>
bash 配列内に a を配置すると、構文エラーが発生します。
予期しないトークン付近の構文エラー `>'
`commandpart=( --flags "filename" >/dev/null )'
私が試した他のことは、すべてを文字列に貼り付けてそれをeval
ingすることです:
commandpart="--flags filename >/dev/null"
eval "command $commandpart"
しかし、これはエスケープやスペースなどの問題を引き起こします (eval は正確にはベスト プラクティスではありません)。
できれば、次のような文字をエスケープせずに最初の例で構文エラーを修正するにはどうすればよい<>&
ですか? この配列構文は eval よりもはるかに堅牢で、エスケープする必要がないため、引き続きこの配列構文を使用したいと思います。
そうでない場合、私のニーズに合ったコマンドの一部を移動する別の方法はありますか?
ボーナス ポイント:次のようにスクリプトに引数を渡して実行すると、次のようになります。
#!/bin/bash
echo "script running"
command "${@}"
をスクリプト呼び出しに追加する >/dev/null
と、コマンドではなくスクリプトに適用されます。
$ script >/dev/null
エスケープ中にコマンドに適用されますが、意図した効果を持たない文字列として適用されます。(たとえば、コマンドが firefox の場合、'>/dev/null' というページで firefox が開き、すぐに 404 が表示されます)