web-dev-qa-db-ja.com

すべての変数名とそれらの現在の値をリストする方法は?

すべての変数名とそれらの現在の値をリストする方法は?

$HOME$PWDなどだけでなく、ユーザーが定義した他のものも含めます。

340
Strapakowsky

bashの場合:(Ubuntuの標準シェル)

ターミナルで次のコマンドを入力して、すべての環境変数を印刷します。

printenv

このコマンドの詳細については、 printenv manページ を参照してください。


「シェル変数」を含むリストを表示するには、次のコマンドを入力できます。

( set -o posix ; set ) | less

これにより、シェル変数だけでなく環境変数も表示されます。

このトピックに関連する詳細については、次を参照してください。


zshの場合:(高度なシェル)

次のコマンドを使用します。

( setopt posixbuiltin; set; ) | less

ZSHオプションの詳細については、 zshoptions manページ を参照してください。

469
Lucio

私はこの質問がかなり古くて答えられていることを知っていますが、少し役に立つ情報を追加できると思います。

上記のすべての方法で、推奨される手順は次のとおりです。

  • ターミナルを起動する
  • env、またはprintenvなどを使用して環境変数を表示します

これらのソリューションの問題は、環境変数端末に実行されているシェルのが表示されていることです。たとえば、グラフィックインターフェイスによって直接実行されるアプリケーションで使用可能な環境変数は表示されません。

これは、たとえば、~/.profile、または.bashrc、または.zshenv(シェルに応じて)を使用して環境変数を変更する場合に顕著です-従来のディレクトリの追加のようにパスに。

グラフィック環境で直接起動されたアプリケーションで使用可能な環境変数を確認するには、次の操作を実行できます(Gnomeシェルでは、他のすべてのDEに同等のメソッドがあると確信しています)。

  • alt-F2を押す
  • コマンドxterm -e bash --noprofile --norcを実行します

(または、xtermgnome-terminal -- bash --noprofile --norcがない場合--- @Mike Nakisのコメントに感謝します)。

これで、環境変数を追加しなかったシェルを備えた端末ができました。ここでenvを使用して、すべての環境変数をリストできます。

Example of the bare Shell

明らかに、新しいシェルにはシステムファイルによって環境変数が追加されますが、その変数は(継承によって)システム内のすべてのプログラムで利用できるはずです。

.pam_environmentファイルを確認して、このトリックをもう一度検索する必要があるのは4回目なので、これを投稿しています。だから今、私はそれをより速く見つけるでしょう(そしてその過程で、私は他の誰かを助けることを望みます...)

51
Rmano

declareビルトインですべての変数を見ることができます。

declare -p

環境変数のみに関心がある場合は、使用します

declare -xp

help declareを実行して、他のオプションを確認します。

43
geirha

ターミナルの環境変数をリストするには CTRL+ALT+T envコマンドを使用できます。

例えば ​​:

[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
Shell=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja

等.

それが役立つことを願っています。

11
rɑːdʒɑ

Compgenを使用したbashの場合:

compgen -v | while read line; do echo $line=${!line};done  
6
tmgoblin

envPOSIX 7の方法

export asdf=qwer
env | grep asdf

サンプル出力:

asdf=qwer

エクスポートされた変数のみが表示されます。エクスポートされていない変数は、通常「環境変数」とは見なされません。

POSIXではないprintenvよりもそれを優先します。どちらも引数なしで同じことをするようです: https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv

ここでのほとんどのソリューションは、環境変数のみを印刷するか、envまたは(set -o posix; posix)が解析可能な形式で値を印刷しないという欠点があります(変数A = $ 'a\r\nb' ...を印刷してみてください) 。

POSIXエスケープ形式で、すべての変数を1行に1変数ずつ出力する関数を次に示します。

function dump_vars {
    local VARNAME
    compgen -v | while read -r VARNAME; do
        printf "$VARNAME=%q\n" "${!VARNAME}"
    done
}

Compgen -vの使用を指摘してくれた@tmgoblinに感謝します。

3
Ján Lalinský

すべてをprintenvで印刷するのではなく、特定の環境変数が必要な場合は、たとえばecho "$PWD"を実行して印刷できます。

2
inigo333

printenvはエクスポートされた変数のみをリストします。 command+alt+$ ( "\ e $":complete-variable)は、すべての変数をリストします。

0
user1133275