2012-03-26 12 views
4

私は表示するときにcomsumedされる文字列幅をカウントするbash関数が必要です。私の場合、Stringにはいくつかのワイド文字(たとえば中国語)が含まれている可能性があるので、 だから私は文字列の長さだけを使うことはできません。bashスクリプトでは、文字列の表示幅を取得する

function getDisplayWidth() 
{ 
    ??? 
} 

その後 "ABC" は3 を返すと "前后" wc -mを試してみてください代わりに2

答えて

4

wcの実装に-Lオプションがある場合、それは正しい「もの」をカウントするように見えます。 (のCoreutilsは、他にやるかどうかわからない、それを持っている。)

例:

$ getw() { wc -L <<< "$1"; } 
$ getw 前后 
4 
$ getw 前a后c 
6 
$ getw abc前后 
7 
$ getw "行书/行書" 
11 
+0

'wc -L <<<" $ 1 "' –

+0

@ IgnacioVazquez-Abrams:はい、ありがとう。 – Mat

+0

@Mat:ありがとう、一行の機能は素晴らしいです! – Nybble

0

の4を返す必要があります。 os xマニュアルページから:

各入力ファイルの文字数は、標準出力 に書き込まれます。現在のロケールがマルチバイト文字をサポートしていない場合、 これは-cオプションと同じです。これにより、以前の の-cオプションの使用が取り消されます。

+0

'WC -m'彼のサンプル中国語のテキストと2を与えるだろう - 2つだけ文字があります。 – Mat

+0

おっと、質問を後で読んでください。ごめんなさい! – phs

関連する問題