シェルスクリプトでマルチバイト文字の文字数を確認する際の注意事項(おまけでJSTなど)
Contents
はじめに
Bashシェルスクリプトで日本語の全角文字(ex: あいう)の文字数を取得したかったのですが環境の設定に注意しないといけないことがありました。
検証環境
マルチバイト文字のを含む文字列の「バイト数」「文字数」を取得
マルチバイト文字のを含む文字列の「バイト数」「文字数」をそれぞれ取得してみたいと思いました。
クリーンな環境が欲しかったので、 docker run
で CentOS7 環境を利用してみました。
ここで、 あいう という全角3文字のバイト数、文字数を取得してみます。
それぞれ wc -c
、 wc -m
というコマンドに対してパイプ経由で文字列を渡してやります。
「バイト数」は想定通りでしたが、「文字数」が正しく取得できません。(バイト数と同じ値になってしまいました。)
LANG
環境変数を設定することで対処
解決方法からいうと、 LANG
環境変数を設定してやることで問題が解決できます。
面白いのは、日本語ロケール値( ja_JP.utf8
)を設定しなくても解決できるということです。
試してみます。
このようにマルチバイト文字を考慮した文字数が取得できるようになりました。
おまけ:日本語ロケールを導入する
date
コマンドなどで日本語表記したい場合は、 localedef
を実行した後、環境変数 LANG
を設定してやります。
さらにタイムゾーンを JST に変更したい場合は TZ
環境変数を設定しましょう。
ひとこと
Dockerイメージ作成の際に日本語ローカライズしたい場合にどうぞ。
ディスカッション
コメント一覧
まだ、コメントがありません