是否有一个命令不仅可以回显它的参数,还可以在需要时转义它们(例如,如果参数包含空格或特殊字符)?
我需要在一些 shell 魔术中使用它,而不是在一个脚本中执行命令,而是回显该命令。此输出通过管道传输到最终以更有效的方式执行命令的 python 脚本(它加载实际目标 python 脚本的 main() 方法并使用给定的参数执行它,并且通过女巫计算的数据缓存了一个附加参数main()) 的运行。
取而代之的是,我当然可以将所有 shell 魔术移植到 python 中,我不需要管道任何东西。
使用 bash,printf
内置命令有一个额外的格式说明符%q
,它以友好的方式打印相应的参数:
除了标准的 printf(1) 格式之外,还
%b
导致 printf 在相应参数中扩展反斜杠转义序列(除了\c
终止输出、不删除 、 和 中的反斜杠\'
,\"
并且\?
以开头的八进制转义\0
符最多可以包含四位数字),并%q
导致 printf 以可重复用作 shell 输入的格式输出相应的参数。
所以你可以做这样的事情:
printf %q "$VARIABLE"
printf %q "$(my_command)"
以可以安全地再次作为输入传递的格式(即空格转义)获取变量的内容或命令的输出。例如:
$ printf "%q\n" "foo bar"
foo\ bar
(我添加了一个换行符,这样它在交互式 shell 中会很漂亮。)