Linux bash ターミナルで現在定義されているすべての環境変数のリストを表示するにはどうすればいいですか?

Linux bash ターミナルで現在定義されているすべての環境変数のリストを表示するにはどうすればいいですか?

Linux bash ターミナルでは、$PATHや のように、多くの環境変数が設定されていることがよくあります$HOME

設定されているすべての環境変数を確認することは可能ですか? 方法は?

答え1

要約:使用(set -o posix ; set)


Bashのマニュアルによれば、set組み込みコマンドを使用してすべての環境変数を表示します設定されているものが表示されます。setコマンドは関数の定義も表示します。関数ではなく変数だけを表示したい場合は、set コマンドを実行する前に POSIX モードをオンにすることができます。これを行う最も簡単な方法は を使用することですset -o posixが、 でオフにするまで POSIX モードはオンのままになりますset +o posix

したがって、次のコマンドは、現在のシェルの POSIX 準拠に影響を与えることなく、サブシェルを使用して定義されたすべての環境変数を表示します。

(set -o posix ; set)

@RedGrittyBrick と @iglvzx はenvコマンドの使用を提案しましたが、このコマンドでは環境変数の完全なリストは提供されません。 はエクスポート対象としてマークされた変数のみを表示します。とenvの出力を比較すると、私の言っていることがわかるでしょう。エクスポートされていない環境変数を確認するには、を実行できます。env | sortexport -pcomm -23 <(set -o posix; set) <(env|sort)

この矛盾の理由は、 がenv別個の実行ファイルであるのに対し、 がsetシェルの組み込みコマンドであるからです。Bashのマニュアルによると、シェルの組み込みコマンドまたは関数ではないコマンドが実行されると、Bashでエクスポート用にマークされた環境変数のみが受信されます。エクスポートされない変数が多数あります。したがって、シェルで定義されているすべての変数を確認するには、setマニュアルに記載されているコマンドを使用する必要があります。

次のコマンドを使用して、この動作を自分で簡単にテストできます。

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

setは出力を提供しますが、は出力を提供しないことがわかりますenv

答え2

引数のないコマンドenvは、「エクスポートされた」環境変数とその値のリストを出力します。これらの変数はサブプロセスで表示されます。他の多くの環境変数はこれと一緒には表示されず、実行中のシェル内でのみ使用されます (構成など)。

答え3

compgen -v

シェル変数を出力します (ただし値は出力しません)。

compgen -e

エクスポートされた変数、つまりこのシェルが開始するプロセスによって継承される変数 (ただしその値は出力しません) を出力します。

シェル変数とエクスポート変数の違い:https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1

答え4

これまでの回答のいくつかを組み合わせると、次のことが役立つと思います。

compgen -v  | sort | while read var; do [ -z "${!var}" ] || echo $var=${!var} ; done
  • compgen -v: ローカルまたはエクスポートされたすべての変数名を出力します。
  • sort: アルファベット順。
  • ${!var}: $var の値を取得します (変数間接参照)。
  • -z条件: 値が null かどうかを確認し、そうでない場合は「variable=value」を出力します。

注: printenvも優れていますが、ローカル/bash 変数ではなく、エクスポートされた環境変数のリストのみが表示されます。

関連情報