文字列の表示幅を取得します。

文字列の表示幅を取得します。

シェルスクリプト(少なくとも端末(文字が現在のロケールで正しい幅で表示される端末))で文字列の表示幅を取得する最も近いポータブル方法は何ですか?

主に非制御文字の幅に興味がありますが、バックスペース、キャリッジリターン、水平タブなどの制御文字の解決策も歓迎します。

つまり、私は次を探しています。シェルPOSIX関数を囲むAPI wcswidth()

このコマンドは以下を返す必要があります。

$ that-command 'unix'   # 4 fullwidth characters
8
$ that-command 'Stéphane' # 9 characters, one of which zero-width
8
$ that-command 'もで 諤奯ゞ' # 5 double-width Japanese characters and a space
11

列に埋め込まれた文字幅を考慮するを使用するか、ksh93たとえば、少なくともText::CharWidthモジュールがありますが、より直接的または移植可能な方法はありますか? ?printf '%<n>Ls'<n>colprintf '++%s\b\b--\n' <character> | col -bperl

これはほぼフォローアップです。別の問題これは画面の右側にテキストを表示することに関するものであるため、テキストを表示する前にその情報を取得する必要があります。

ベストアンサー1

1行文字列の場合、GNU実装には必要な操作を正確に実行する(制御文字を除く)オプションがありますwc-L--max-line-length

おすすめ記事