回答:
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 | sortand の出力を比較すると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まさに私が欲しかったものです!