回答:
TL; DR:使用(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 | sort
and の出力を比較するとexport -p
、意味がわかります。comm -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
しないことがわかります。
env
引数なしのコマンドは、「エクスポートされた」環境変数とその値のリストを出力します。これらの変数はサブプロセスから見えるようになります-他の多くの環境変数はこれと共に表示されず、実行中のシェル内でのみ使用されます(構成など)。
printenv
の両方のために、env
とset
だけ環境を出力する以外の機能を持っています。
env
エクスポート用にマークされた環境変数のリストのみを印刷します。すべての変数を出力するわけではありません。
compgen -v
シェル変数を出力します(値は出力しません)。
compgen -e
エクスポートされた変数、つまり、このシェルが開始するプロセスに継承される変数を出力します(ただし、値は出力しません)。
シェル変数とエクスポートされた変数の違い:https : //unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
compgen -e
まさに私が欲しかったものです!