2011-02-22 77 views

回答

8

在bash的内置的printf具有特殊的格式说明(即%B),其将\ X * *到相应的值:

$ str='foo%20%5B12%5D' 
$ printf "%b\n" "${str//%/\\x}" 
foo [12] 
1

最后,由于#bash IRC信道,我发现了一个 “不那么坏” 的解决方案:

echo `echo string%20with%5Bsome%23 | sed 's/%/\\\x/g'` 
+0

我看不到周围的`echo`购买你。使用%5Bsome%23 |回显字符串%20 sed's /%/ \\\ x/g'`不工作? – Thanatos 2011-02-22 18:37:23

+1

@Thanatos:sed只是将带有%5Bsome%23`的字符串%20变成`string \ x20with \ x5Bsome \ x23`。将它传递给`echo -e`将意味着正确处理了`\ x..`转义符。 [缺少`-e`和反引号应该用双引号括起来:`echo -e“$(回显字符串%20with%5Bsome%23 | sed'/%/ \\\ x/g')”`。] – bobbogo 2011-02-22 18:52:35