challenge 環境変数の取得

コマンドライン引数の取得がありましたが、今回は環境変数の取得をお願いします。

取得した内容を表示できればよいですが、可能でしたらキーから値を得る手段の実装もお願いします。

Posted feedbacks - D

D 2.0 + 標準ライブラリ (Phobos)、Linuxで動作確認。連想配列を作ってしまう方針で。
Phobosには環境変数APIが無いので、Cの environ(7) を直接呼び出します。
C文字列をDのstringに変換する処理が面倒ですね。もっとうまいやり方があるような気がする...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import std.stdio;
import std.string;
import std.c.linux.linux: environ;
import std.c.string: strlen;

void main()
{
    char** p;
    string[string] envAA;
    for (p = environ; *p != null; p++) {
        char[] key_and_value = (*p)[0 .. strlen(*p)];    // "FOO=BAR"
        int iEqual = key_and_value.find('=');    // index to '='
        string key = cast(string)(key_and_value[0 .. iEqual]);
        string value = cast(string)(key_and_value[iEqual + 1 .. $]);
        envAA[key] = value;
    }
    envAA.rehash;

    foreach(key, value; envAA) {
        writefln("%s: %s", key, value);
    }
    writefln("PATH = %s", envAA["PATH"]);
}

変数名から値を得るだけなら、getenv 関数があります。

1
2
3
4
5
private import std.stdio, std.process;

void main() {
    writeln(getenv("PATH"));
}

Index

Feed

Other

Link

Pathtraq

loading...