俺のメモ帖

とあるインフラ系SEのメモ帖。日常的なものや、趣味や技術的なもとか書けたらいいなぁ。

【linux】シェルスクリプトのデバッグモード実行で2バイト文字列が文字化けする件【bash】

現場で使ってるRHEL7.1でのお話。


シェルスクリプトデバッグモード-xで実行した場合に、2バイト文字が文字化けしてしまい、
test="テスト"

+ test=$'¥343¥203¥206¥343¥202¥271¥343¥203¥210'
みたいに出力されてしまう。

シェルスクリプトの記述されている文字コードや、環境変数LANGの設定値に関係なく発生するようだが。。。

ただ、これは実際に文字化け起こしてしまっているわけではなく、あくまでデバッグ出力の表示上だけで、実際にデータが化けてしまっているわけではないので、問題無いっちゃ問題無い。

ただ、シェルのテストとかでデバッグモード使用して内部処理が実際にどういう順序で行われているのか確認したりした証跡を提出する必要がある場合がたまに有るんだけど、そういうときに文字化けしてるとちょっとみっともない。

なんとか文字化けしないようにデバッグ出力させる方法が無いか調べてみた。

その結果、特定の1バイト記号を2バイト文字列の先頭に付加すると、何故か文字化けせずに出力されるということが判った。
ただし、理由は判らないけど、1バイト文字なら何でも良いって訳でもないようだ。
しかも、OKの記号とNGの記号の別れ方に規則性も見いだせない…
だけども何故か2バイト文字列がデバッグ出力で文字化けしなくなる。
具体的には、以下のように分かれた。

  • 文字化けする1バイト記号
    : % . , = - + @ _

  • 文字化けしない1バイト記号
    # (半角スペース) ; [ ] ¥ ( ) $ | ^ * & ~ { } ! ? < >

うーむ、わからん。
bashコマンドのソース見てみれば判るのかな?

ちなみに、自宅でVMPlayerにCentOS 7インストールして、同じこと試したら文字化けしなかった。
あれ?環境差異?いったいどこの設定?

入門bash 第3版

入門bash 第3版