在新的 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

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

相关内容