シェルスクリプトにすると動かない不思議なコマンド(解決?)
昨日の動かないシェルスクリプト。
VERSION = `grep -E '^\s*system\.version\s*=' $SYSTEM_PROPERTIES`
原因はそのコマンドではなく、スクリプトにあったこの環境設定でした。
LANG=en_US
手元の環境では、この設定を行った場合、文字コードが ISO-8859-1 になりました。
この設定下だと、正規表現の「\s」指定が効かなくなるようです*1。
ためしに、設定を「LANG=en_US.utf8」に変更したところ正常に動くようになりました。
いまいち詳しい原因がわからないのですが・・・。
grep の Manpage を読むと、正規表現で使用する文字集合はロケールの LC_CTYPE に依存するとのこと。
なので、ISO-8859-1 の LC_CTYPE で space が定義されていないんじゃないかと思います。
(ファイル自体はあるんですが、バイナリーファイルなので中身の確認ができませんでした)
でも、ISO-8859-1 は ASCII 互換だから当然定義されていそうな気がするんですが・・・。
結局、動いたけれども腑に落ちないままです。
*1:該当のプロパティファイルは、「=」の前後に空白がありました