以下の内容はhttps://blog-smatsuzaki.hatenablog.com/entry/2025/10/30/145034より取得しました。


トラブルシュート:pythonでexportしたはずの環境変数が取得できない

問題

pythonos.environ[]環境変数を受け取るコードを作った。

import os

print(os.environ['FOO'])
print(os.environ['BAR'])

↑のコードを実行するコードの実行方法をREADMEに以下のように書いた。

# 以下のexportを実行してから、pythonコードを実行してください

export FOO=aaa \
# comment...
BAR=bbb 

↑のexportを実行後、pythonコードを動かしてみたらエラーとなった。

python3 env.py
aaa
Traceback (most recent call last):
  File "/tmp/env.py", line 4, in <module>
    print(os.environ['BAR'])
          ~~~~~~~~~~^^^^^^^
  File "<frozen os>", line 685, in __getitem__
KeyError: 'BAR'

「何か間違えた?」と思いながら echo(1) を実行するが FOO BAR 共に問題なく宣言できているように見え混乱した。

echo $FOO $BAR
aaa bbb

原因

export文の中にコメントを入れたのがよくなかった。

以下を実行するとコメント文を入れた箇所で処理が分断され、 export $FOO=aaa$BAR=bbb という2つのコマンドが別個に実行される。

export FOO=aaa \
# comment...
BAR=bbb 

その結果、 FOO環境変数BAR はシェル変数として宣言される。

echo(1)環境変数とシェル変数両方を参照するのでこのような場合の切り分けには向かない。 従って、変わりに export -p を使うべき。

$ export -p | grep FOO
export FOO=aaa

$ export -p | grep BAR
$

教訓

  • ワンライナー中にコメントを入れるのは辞めよう
  • 環境変数が宣言できているかどうかは、 export -p で確認すべし



以上の内容はhttps://blog-smatsuzaki.hatenablog.com/entry/2025/10/30/145034より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14