
$PATH
Linux bash 터미널에는 및 와 같이 설정된 환경 변수가 많은 경우가 많습니다 $HOME
.
설정된 환경변수를 모두 볼 수 있나요? 어떻게?
답변1
요약:사용(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
and 의 출력을 비교해 보면 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
그렇지 않은 것을 볼 수 있습니다 .
답변2
인수가 없는 명령은 env
"내보낸" 환경 변수 및 해당 값 목록을 인쇄합니다. 이러한 변수는 하위 프로세스에 표시됩니다. 다른 많은 환경 변수는 여기에 표시되지 않으며 구성 등을 위해 실행 중인 셸 내부에서만 사용됩니다.
답변3
compgen -v
쉘 변수를 인쇄합니다(값은 제외).
compgen -e
내보낸 변수, 즉 이 쉘이 시작하는 프로세스에 의해 상속되는 변수를 인쇄합니다(그 값은 아님).
쉘과 내보낸 변수의 차이점:https://unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
답변4
이전 답변 중 일부를 결합하면 다음이 유용하다고 생각합니다.
compgen -v | sort | while read var; do [ -z "${!var}" ] || echo $var=${!var} ; done
compgen -v
: 로컬 또는 내보낸 모든 변수 이름을 인쇄합니다.sort
: 알파벳 순서.${!var}
: $var(가변 간접 참조) 값을 가져옵니다.-z
조건 : 값이 null인지 확인하고, 그렇지 않으면 "variable=value"를 인쇄합니다.
참고:
printenv
또한 훌륭하지만 로컬/bash 변수가 아닌 내보낸 환경 변수 목록만 표시합니다.