2016-04-27 225 views
2
#!/bin/bash 

a=ača 

echo ${#a}         #returns 3 
echo $a | xargs -rL1 sh -c 'echo ${#0}'; #returns 4 

在第一個回聲中它給了我正確的字符串長度。我應該怎麼做才能在第二個回顯中返回正確的字符串長度? (我想在這兩種情況下的長度爲3)如何返回xargs中的字符串長度(特殊字符)

在我的程序中,我有很多行,我必須編輯,這就是爲什麼我使用xargs。

+0

我得到3兩個。在我的系統上(Fedora 23)'bash --version'給出'GNU bash,版本4.3.42(1) - 釋放(x86_64-redhat-linux-gnu)' – amdn

+0

幸運的是,我正在使用linux mint –

+2

@amdn你的'/ bin/sh'被正確地鏈接到bash,而不是像破折號這樣的更多posix嚴格的非unicode感知shell – andlrc

回答

3

問題不在於xargs。問題是sh。如果你想要正確的(unicode)長度,你需要使用一個支持unicode的shell。注意:

$ echo $a | xargs -rL1 sh -c 'echo ${#0}' 
4 
$ echo $a | xargs -rL1 bash -c 'echo ${#0}' 
3 

在Debian-like系統,默認的shell,/bin/sh,實際上是dash不明白Unicode的。如上所示,只需用bash代替sh即可解決問題。

相關問題