2011-02-22 110 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