新しいbashコマンド(bash -c)で「$ @」特殊パラメータを使用します。

新しいbashコマンド(bash -c)で「$ @」特殊パラメータを使用します。

bash -c次のように、親bashスクリプトのパラメータに依存するコマンドを実行しようとします。"$@"

私は通常のコマンドを実行するときに"$@"各パラメータの拡張魔法を実行するためにbashを使用します。

printf '[%s] [%s]\n' "$@"
$ ./script one "t w o"
[one] [t w o]

私の最初の素朴な脱出の試みは奇妙な方法で失敗しました。$@なぜなら、親bashが現在の引数の「終わり」であるように見えるからです。

bash -c "printf '%s %s\n' \"$@\""
$ ./script one "t w o"
t w o": -c: line 1: unexpected EOF while looking for matching `"'
t w o": -c: line 2: syntax error: unexpected end of file

そこで、"$@"それは実際に引用されたものがなく、bashが低レベル拡張を処理していると推測するので、一般的なエスケープ技術に反しますexec

1行のコード"$@"でスクリプトパラメータを使用する方法はbash -c

ベストアンサー1

エスケープを避けるには、ダミー引数を含め、通常どおり親に"$@"渡してください。"$@"bash -c$0

bash -c 'printf "[%s] [%s]\n" "$@"' this-is-bash-dollar-zero "$@"
$ ./script one "t w o"
[one] [t w o]

おすすめ記事