[ruby-list:49989] Windowsの"="で始まる環境変数

From: OOTANI TAKASHI <tksotn@...707.to>
Date: 2014-10-22 12:38:22 UTC
List: ruby-list #49989
大谷ともうします。

Windowsのおかしな点の一つとして、=で始まる環境変数があります。
ドキュメントには無いようですが、

=C: =D: など
   ドライブ毎のカレントディレクトリを保持(移動したことのあるドライブのみ)
=::
   意味がよくわからない。::\ という値
=ExitCode
   コマンドプロンプトから直近に起動した外部コマンドの終了コード

ところが、環境変数名が=を含むことを想定していないRubyでは、

D:\>ruby -ve "ENV.clear; p ENV.size, ENV['=D:']"
ruby 2.1.3p242 (2014-09-19 revision 47630) [i386-mingw32]
0
"D:\\"

のように、「クリアしてサイズゼロなのに中身がある」
という不思議な状態になってしまいます。
ちょっと気持ち悪いですが、これをどうするのが一番いいのか。

Hash.cのENV関連の strchr(*env, '=') を、strchr(*(env+1), '=') にすれば、
=で始まる環境変数名も処理できそうですが、それでいいのか。
あるいは、=を含むキーではエラーにするべきか、参照はnilにするべきか。

という問題提起をしてみます。
まあ、たぶん使い道のない環境変数なので、どうでも良いかもしれません。

-- 
OOTANI TAKASHI <tksotn@mail.707.to>

In This Thread

Prev Next