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

a=ača 

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

最初にechoを実行すると、正しい長さの文字列が得られます。 2番目のエコーで正しい長さの文字列を返すにはどうすればよいですか? (私は両方の場合に長さ3が必要です)xargs(特殊文字)で文字列の長さを返す方法

私のプログラムでは、私は編集しなければならない行がたくさんあるので、xargsを使用しています。

+0

私は両方とも3点です。私のシステム(Fedora 23)で 'bash --version'はGNU bash、バージョン4.3.42(1)-release(x86_64-redhat-linux-gnu)' – amdn

+0

を提供しています。私はlinux mintを使用しています –

+2

@amdnあなたの '/ bin/sh'はbashに正しくリンクされていて、ダッシュのようなposixの厳密な非ユニコード対応シェルではありません – andlrc

答えて

3

問題はxargsではありません。問題はshです。正しい(ユニコード)長さが必要な場合は、ユニコードをサポートするシェルを使用する必要があります。お守り:Debianのようなシステムでは

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

は、デフォルトのシェル、/bin/shが、実際にはUnicodeを理解していないdashです。上記のように、をbashに置き換えるだけで問題は解決します。

関連する問題