2

コマンドの一部をbashで渡したいので、次のようにします。

commandpart=( --flags "filename" >/dev/null )
command "${commandpart[@]}"

次のように評価されます。

command --flags "filename" >/dev/null

これは以前はうまく機能していましたが、残念ながら>bash 配列内に a を配置すると、構文エラーが発生します。

予期しないトークン付近の構文エラー `>'
`commandpart=( --flags "filename" >/dev/null )'

私が試した他のことは、すべてを文字列に貼り付けてそれをevalingすることです:

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 が表示されます)

4

2 に答える 2