Xargs
無法理解 xargs 如何處理 unicode 文字
我正在嘗試將 unicode 文字轉換為可讀格式。我正在使用 -t 標誌來查看 xargs 在執行它之前將執行什麼命令。我看到以下奇怪現象:
$ echo -n "\\\t\\\u0042\\\u0065\\\u006e" | xargs -t -I '{}' echo -e '"'{}'"' echo -e "\t\u0042\u0065\u006e" " \u0042\u0065\u006e"
然而,當我手動執行它時:
$ echo -e "\t\u0042\u0065\u006e" Ben $
在這
\t
兩個範例中都得到了正確處理。但是在第一個範例中這些\u00XX
值被視為純字元串,但在第二個範例中被正確編碼。當我使用時,我也看到了同樣的怪異printf
。$echo -n "\\\t\\\u0042\\\u0065\\\u006e" | xargs -t -I '{}' printf \"{}\" printf "\t\u0042\u0065\u006e" " printf: invalid universal character name \u0042 $ printf "\t\u0042\u0065\u006e" Ben
關於正在發生的事情以及如何解決它的任何想法?
Dave 是對的,不涉及 shell,所以 echo 是 /bin/echo,試試這個:
echo "\\\t\\\u0042\\\u0065\\\u006e" | od -c echo "\\\t\\\u0042\\\u0065\\\u006e" | xargs -t -I '{}' echo -e '"'{}'"' # echo -e '"'\t\u0042\u0065\u006e'"' /bin/echo -e '"'\\t\\u0042\\u0065\\u006e'"'
結果:
0000000 \ \ t \ \ u 0 0 4 2 \ \ u 0 0 6 0000020 5 \ \ u 0 0 6 e \n 0000031 " \u0042\u0065\u006e" " \u0042\u0065\u006e" echo -e "\t\u0042\u0065\u006e"
嘗試使用線上 bash shell