是否有一个命令不仅会回显其参数,而且还会在需要时转义它们(例如,如果参数包含空格或特殊字符)?
我需要在一些 shell 魔法中使用它,而不是在一个脚本中执行命令,而是回显该命令。此输出通过管道传输到一个 python 脚本,该脚本最终以更有效的方式执行命令(它加载实际目标 python 脚本的 main() 方法,并使用给定的参数和附加参数执行它,计算数据缓存在main() 的运行)。
相反,我当然可以将所有 shell 魔法移植到 python,这样我就不需要通过管道传输任何东西。
使用 bash,printf
内置有一个附加的格式说明符%q
,它以友好的方式打印相应的参数:
除了标准 printf(1) 格式之外,%b
导致 printf 展开相应参数中的反斜杠转义序列(除了\c
终止输出,反斜杠\'
, \"
, and \?
不会被删除,并且以以下开头的八进制转义符\0
最多可包含四位数字),并且%q
导致 printf 以可重复用作 shell 输入的格式输出相应的参数。
所以你可以这样做:
printf %q "$VARIABLE"
printf %q "$(my_command)"
以可以安全地再次作为输入传递的格式获取变量的内容或命令的输出(即转义空格)。例如:
$ printf "%q\n" "foo bar"
foo\ bar
(我添加了一个换行符,这样它在交互式 shell 中会很漂亮。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)