我想实现一个 bash 函数,将其参数作为命令运行,同时(可能是可选的)在之前打印命令。想想安装脚本或测试运行脚本。
只是使用
function run () {
echo "Running $@"
"$@"
}
不允许我将调用与run foo arg1 arg2
and区分开来run foo "arg1 arg2"
,因此我需要正确转义参数。
到目前为止我最好的镜头是
function run () {
echo -n "Running"
printf " %q" "$@"
echo
"$@"
}
哪个有效:
$ run echo "one_argument" "second argument" argument\"with\'quotes
Running echo one_argument second\ argument argument\"with\'quotes
one_argument second argument argument"with'quotes
但不是很优雅。我怎样才能实现输出
$ run echo "one_argument" "second argument" argument\"with\'quotes
Running echo one_argument "second argument" "argument\"with'quotes"
one_argument second argument argument"with'quotes
即我怎样才能printf
在需要引用的参数周围加上引号,并在其中正确地转义引号,以便输出可以正确地复制'n'粘贴?