UNIX の「set」コマンドで環境変数のみを印刷する方法

UNIX の「set」コマンドで環境変数のみを印刷する方法

set私は、PATH などの環境設定のリストのみを表示するbash コマンドに慣れています。

しかし、私がセットアップしたばかりの Ubuntu システムでは、実行するとset、次のような多くの関数を含む 2000 行のテキストがダンプされます。

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

環境変数のみを印刷するにはどうすればよいですか?

答え1

デフォルトではsetシェル変数環境変数だけでなく、bash関数も変数の一部とみなされます。https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference

envまたはをprintenv使用すると、環境子プロセスにエクスポートされますが、必然的にあなたの環境と同じですbash:

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

bashdeclaretypeset組み込み関数では、関数を省略するために、すべてのタイプの変数をリストできます。

declare -F

これらの出力は、シェル スクリプトで状態を再現するのに適した形式であるため、少し冗長ですが、配列、整数、その​​他の型を区別できます (バージョンによって異なります)。 の出力も参照してくださいexport -p

そしてhttps://stackoverflow.com/questions/1305237/how-to-list-variables-declared-in-script-in-bash bash に POSIX モードを使用するように指示すると、set「適切に」動作します。

( set -o posix ; set ) 

これはサブシェルで実行されるため、実行中のシェルは変更されず、継承された環境にまだエクスポートされていない変数が正しく取得されます。

答え2

すべての環境変数を一覧表示したい場合は、 と入力するだけですenv

関連情報