【发布时间】:2014-07-24 06:29:36
【问题描述】:
扩展转义字符串的方法有很多,但是如何让shell命令将字符串作为参数并转义呢?
以下是一些不同扩展方式的示例:
$ echo -e '\x27\\012\b34\n56\\\aa7\t8\r 9\0\0134\047'
'\0134
9\'7 8
$ echo $'\x27\\012\b34\n56\\\aa7\t8\r 9\0\0134\047'
'\0134
9\a7 8
$ PS1='(5)$ ' # At least tab-width - 3 long; 5 columns given typical tab-width.
(5)$ printf %b '\x27\\012\b34\n56\\\aa7\t8\r 9\0\0134\047'
'\0134
9\'(5)$
注意:上面的 7 和 8 之间其实有一个制表符,但是标记渲染好像把它打断了。
是的,里面有各种各样的疯狂。 ;-)
无论如何,我正在寻找这种转义扩展命令的反面。如果该命令被称为escape,它将满足以下属性:
$ echo -ne "$(escape "$originalString")"
应该像“echo -n "$originalString"”一样输出originalString 的逐字值。 IE。它应该是一个身份。
同样:
$ escape "$(echo -ne "$escapedString")"
应该再次输出转义的字符串,尽管不一定以与以前相同的方式。例如。 \0134 可能会变成 \\,反之亦然。
【问题讨论】: