シェルスクリプトにすると動かない不思議なコマンド(解決?)

昨日の動かないシェルスクリプト

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:該当のプロパティファイルは、「=」の前後に空白がありました