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]