回显shell转义参数[重复]

Posted

技术标签:

【中文标题】回显shell转义参数[重复]【英文标题】:echo that shell-escapes arguments [duplicate] 【发布时间】:2011-02-13 11:36:51 【问题描述】:

是否有一个命令不仅可以回显它的参数,还可以在需要时转义它们(例如,如果参数包含空格或特殊字符)?

我需要它在一些 shell 魔术中,而不是在一个脚本中执行命令,而是回显命令。此输出通过管道传输到最终以更有效的方式执行命令的 python 脚本(它加载实际目标 python 脚本的 main() 方法并使用给定的参数执行它,并且通过女巫计算的数据缓存了一个附加参数main()) 的运行。

除此之外,我当然可以将所有的 shell 魔法移植到我不需要管道的地方。

【问题讨论】:

【参考方案1】:

对于 bash,printf 内置有一个额外的格式说明符 %q,它以友好的方式打印相应的参数:

除了标准的 printf(1) 格式,%b 使 printf 在相应参数中扩展反斜杠转义序列(除了 \c 终止输出,\'\" 和 @987654327 中的反斜杠@ 不会被删除,以 \0 开头的八进制转义符最多可以包含四位数字),%q 导致 printf 以可重复用作 shell 输入的格式输出相应的参数。

所以你可以这样做:

printf %q "$VARIABLE"
printf %q "$(my_command)"

以可以安全地再次作为输入传递的格式(即空格转义)获取变量的内容或命令的输出。例如:

$ printf "%q\n" "foo bar"
foo\ bar

(我添加了一个换行符,这样它在交互式 shell 中会很漂亮。)

【讨论】:

谢谢,我不知道。如果你使用zsh,你也可以使用q修饰符:$(q)VAR以类似的方式转义变量。 谢谢,但使用 printf 我必须提前知道参数的数量。好吧,我想我想通了。 呃,你有什么理由不能做像for arg in "$@"; do printf %q "$arg"; done这样的事情吗? 噢!我没想到! :) 我挖掘了嵌套引用或作为格式化程序传递的替代语法选项

以上是关于回显shell转义参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不回显的情况下从 shell 脚本中获取密码

带有条件回显的 Shell 脚本

bat的常用命令

Shell基础- 变量判断循环

php回显html中断[重复]

如何回显单行字段[重复]