모든 변수 이름과 현재 값을 나열하는 방법은 무엇입니까?


348

모든 변수 이름과 현재 값을 나열하는 방법은 무엇입니까?

뿐만 아니라 포함 $HOME, $PWD등 있지만 다른 하나는 당신이 정의했습니다.



잘못된 답변을 수락했습니다. "printenv"는 환경 변수 만 제공합니다. 쉘에서 현재 선언 된 모든 변수를 정말로 원한다면 "declare -p"또는 "typeset -p"를 사용하십시오.
플로린 안드레이

답변:


479

bash의 경우 : (우분투의 표준 쉘)

모든 환경 변수를 인쇄하려면 터미널에 다음 명령을 입력하십시오.

printenv

이 명령에 대한 자세한 내용은 printenv매뉴얼 페이지를 참조하십시오 .


"쉘 변수"를 포함하는 목록을 표시하려면 다음 명령을 입력하십시오.

( set -o posix ; set ) | less

이것은 당신에게 보여줄 것이다 뿐만 아니라 쉘 변수 만 환경 변수도 있습니다.

이 주제와 관련된 자세한 정보는 다음을 읽으십시오.


zsh의 경우 : (고급 쉘)

다음 명령을 사용하십시오.

( setopt posixbuiltin; set; ) | less

ZSH 옵션에 대한 자세한 내용은 zshoptions매뉴얼 페이지를 참조 하십시오 .


14
터미널로 가서 쓰고 MYNEWVARIABLE=Ubuntu실행 printenv하면 거기에 표시되지 않습니다. 그 이유는 무엇이며 다른 사람들은 어떻게 나타 납니까?
Strapakowsky

4
아마도 쉘 변수와 환경 변수의 차이점을보고있을 것입니다. 시도 export MYNEWVARIABLE=Ubuntu하면 예상대로 작동합니다.
Rmano

3
단순히 실행하면 자신이 set만든 변수도 나열됩니다. 또는set | grep myvar
Sergiy Kolodyazhnyy

4
printenv외부 명령이므로 내 보낸 환경 변수에 대해서만 알고 인쇄합니다. set내부 bash 명령이므로 모든 "쉘 변수"(내 보낸 환경 변수)와 내 보낸 환경 변수가 표시됩니다.
Dan Pritts

1
Rmano의 @Strapakowsky에 응답 ...이 작동하지 않습니다 @에 확장하려면 unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW,하지만 의지 unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW,이 뜻 unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW. export를 사용하면 "설정 한 변수는이 셸의 변수뿐만 아니라 프로세스에 전달되는 환경의 일부 여야합니다."라고 말합니다. 세 번째 예는 "이 변수는이 프로세스로 전달되는 환경의 일부 여야하지만 나중에는 달라지지 않아야합니다"라고 말합니다.
Bruno Bronosky

52

나는이 질문이 상당히 오래되어 답변을 받았지만 약간의 유용한 정보를 추가 할 수 있다고 생각합니다.

위에서 설명한 모든 방법에서 제안되는 절차는 다음과 같습니다.

  • 터미널을 시작하다
  • env, printenv또는 무엇이든 사용하여 환경 변수 표시

이 솔루션의 문제점은 터미널에서 실행되는 쉘 의 환경 변수 보고 있다는 것입니다 . 예를 들어 그래픽 인터페이스에서 직접 애플리케이션 실행에 사용 가능한 환경 변수가 표시되지 않습니다.

예를 들어, 경로에 디렉토리를 추가하는 것과 같이 환경 변수를 수정 하기 위해 ~/.profile, 또는 .bashrc, 또는 .zshenv(쉘에 따라)을 사용하는 경우에 눈에 able니다 .

응용 프로그램에서 사용 가능한 환경 변수를 그래픽 환경에서 직접 시작한 것을 보려면 다음을 수행하십시오 (Gnome Shell에서는 다른 모든 DE에 동등한 방법이 있다고 확신합니다).

  • Alt-F2를 누르십시오
  • 명령을 실행 xterm -e bash --noprofile --norc

(당신이없는 경우 또는 xterm, gnome-terminal -- bash --noprofile --norc--- 감사는 코멘트 Nakis를 @ 마이크합니다).

이제 환경 변수를 추가하지 않은 쉘이있는 터미널이 있습니다. 당신이 사용할 수있는 env모든 환경 변수를 나열하려면 여기를 :

베어 쉘의 예

분명히 새로운 쉘에는 시스템 파일에 의해 추가 된 환경 변수가 있지만, 그 변수는 어쨌든 시스템의 모든 프로그램에 (상속 적으로) 사용 가능해야합니다.

이 트릭을 다시 검색하고 내 .pam_environment파일을 확인 해야하는 네 번째이기 때문에 이것을 게시하고 있습니다. 이제 더 빨리 찾을 것입니다 (그리고 그 과정에서 다른 사람을 돕고 싶습니다 ...)


데스크탑 환경이 필요하며 서버 CLI 전용 사용자에게는 유용하지 않습니다.
K7AAY

5
예 --- 그러나 CLI의 경우 이전 답변 만 괜찮습니다. 방금 그래픽 환경에서 시작한 응용 프로그램에서 사용할 수있는 환경 변수를 확인해야한다고 지적했습니다. 터미널에서 터미널을 시작할 때 표시되는 것과는 다릅니다. 예를 들어, Kile 앱이 LaTeX 파일을 컴파일 할 수없는 이유를 이해하려는 경우 터미널에서 할 수 있지만 여기에 게시 한 트릭은 많은 도움이됩니다.
Rmano

3
매우 유용한 답변에 감사드립니다! 방금 help.ubuntu.com/community/
Gunnar Hjalmarsson

감사. xterm -e bash --noprofile --norc그래픽 인터페이스로 Ubuntu를 시작할 때 시작 파일을 읽고 실행하지 않기 때문에 권장 했습니까 ? 참조 askubuntu.com/q/1025845/1471

1
요즘 실행하는 올바른 명령 (우분투 18.04)은 다음과 같습니다gnome-terminal -- bash --noprofile --norc
Mike Nakis

45

declare내장 된 모든 변수를 볼 수 있습니다 .

declare -p

환경 변수에만 관심이 있다면

declare -xp

실행 help declare다른 옵션이 무엇인지 볼 수 있습니다.


이것은 지금까지보다 더 깔끔한 - 어 솔루션입니다 POSIXLY_CORRECT=1 set그리고 그것은 또한 언급의 가치가 declare있다 alias위해 (그 상황에서) typeset다른 bash는 내장.

1
이것이 정답입니다.
플로린 안드레이

12

터미널에서 환경 변수를 CTRL+ ALT+로 나열하려면 command 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

기타

그것이 도움이되기를 바랍니다.


env가 일부 변수 o_O를 놓친 것으로 나타났습니다. 특히 VAR = VAL 파일을 소싱 한 후.
ThorSummoner

1
@ThorSummoner 여기에 대한 답변은 stackoverflow.com/questions/15474650/…에
georaldc

7

compgen을 사용하는 bash에서 :

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

2
다른 모든 사람들이 단지 이름 자체보다 더 많이 나열되어 있기 때문에 이것은 허용되는 대답이어야합니다. 필자의 경우 일부 변수에는 여러 솔루션이 불가능한 여러 줄 값이 포함되어 있습니다.
Mene

1
변형 :compgen -v | while read line; do declare -p $line; done
Eljay

4

여기서 대부분의 솔루션은 환경 변수 만 인쇄하거나 env 또는 (set -o posix; posix)가 구문 분석 가능한 형식으로 값을 인쇄하지 않는 단점이 있습니다 (변수 A = $ 'a \ r \ nb'...를 인쇄하십시오). .

다음은 POSIX 이스케이프 형식으로 모든 변수를 한 줄에 하나의 변수로 인쇄하는 함수입니다.

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

compgen -v 사용을 지적한 @tmgoblin에게 감사드립니다.


1
훌륭한 첫 번째 답변! +1 좋은 일을 계속하십시오!
Fabby

3

envPOSIX 7 방식입니다 .

export asdf=qwer
env | grep asdf

샘플 출력 :

asdf=qwer

익스포트 된 변수 만 표시합니다. 익스포트되지 않은 변수는 일반적으로 "환경 변수"로 간주되지 않습니다.

printenvPOSIX가 아닌 over를 선호하십시오 . 둘 다 인수없이 같은 일을하는 것 같습니다 : https://unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv


이미 2 년 전에 언급 : askubuntu.com/a/276162/158442
muru

@muru 공정합니다. 소원이 만들었다 env더 나은 서식을 더 볼 수, 나는 더 많은 정보를 추가했습니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

그것이 편집 을위한 것입니다.
muru

2

을 사용하여 모두 인쇄하지 않고 특정 환경 변수를 원하는 경우 printenv예를 들어 인쇄하여 인쇄 할 수 있습니다echo "$PWD"


0

printenv는 내 보낸 변수 만 나열하고 command+ alt+ $ ( "\ e $": complete-variable)는 모든 변수를 나열합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.