Linux bash 터미널에서 현재 정의 된 모든 환경 변수 목록을 보려면 어떻게합니까? 설정 되어 $HOME있습니다. 설정된 모든 환경

Linux bash 터미널에는 종종 $PATHand와 같은 많은 환경 변수가 설정 되어 $HOME있습니다.

설정된 모든 환경 변수를 볼 수 있습니까? 방법?



답변

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하고 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인수없이 명령은 “수출”환경 변수와 그 값의 목록을 인쇄합니다. 이러한 변수는 하위 프로세스에 표시됩니다. 다른 많은 환경 변수는 여기에 표시되지 않으며 실행중인 쉘 내부에서만 사용됩니다 (예 : 구성).


답변

compgen -v

쉘 변수를 인쇄합니다 (값은 아님).

compgen -e

내 보낸 변수, 즉이 셸이 시작하는 프로세스에 의해 상속되는 변수 (값은 아님)를 인쇄합니다.

셸과 내 보낸 변수의 차이점 : https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1