現場で使ってる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インストールして、同じこと試したら文字化けしなかった。
あれ?環境差異?いったいどこの設定?
- 作者: Cameron Newham,Bill Rosenblatt,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/10/27
- メディア: 大型本
- 購入: 7人 クリック: 138回
- この商品を含むブログ (47件) を見る