我正在尝试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
。
如何在单行代码"$@"
中使用脚本参数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]