환경이 아닌 변수를 모두 인쇄하는 방법은 무엇입니까?

환경이 아닌 변수를 모두 인쇄하는 방법은 무엇입니까?

환경이 아닌 변수를 모두 인쇄하는 방법은 무엇입니까?

다음은 쉘에서 시작한 후 다음을 수행할 때 직접 추가한 모든 변수입니다.

read abc
    123
# echo ${abc} => 123

또는

xyz='123'
# echo ${xyz} => 123

메모리에 추가된 내용을 이해하고 지울 수 있도록 이 모든 내용을 인쇄하고 싶습니다.

답변1

Bash를 사용하는 경우 이 명령은 하위 프로세스에 의해 상속되지 않고 기본 목록의 일부가 아닌 모든 셸 변수의 이름을 나열합니다.

diff -U 1 <(set -o posix ; set |cut -d= -f1) <(exec bash -ic 'set -o posix ; set' | cut -d= -f1)|grep '^[-][^-]'|cut -d- -f2|grep -vE '^(COLUMNS|HISTFILESIZE|HISTSIZE|LINES|PIPESTATUS)$'

그러면 현재 셸의 모든 변수 이름 목록이 생성됩니다(여기서set) 및 동일한 셸을 실행하는 새로 생성된 하위 프로세스의 모든 변수 이름 목록을 사용하여 첫 번째 목록에 있는 모든 변수 이름을 찾고 두 번째 목록에 있는 변수 이름은 검색하지 않습니다(다음을 사용).diff, 마지막 컷 및 첫 번째 grep), 사용자 대상 셸이 아니기 때문에 하위 프로세스에 포함되지 않는 일부 Bash 관련 기본 변수를 제거합니다. 변수만 set -o posix나열 set되고 함수는 나열되지 않습니다.

생략하겠습니다둘 다상속된 환경 변수 및 내보낸 것으로 명시적으로 표시한 변수.

bash쉘을 변경하십시오 . 또한 마지막으로 무시된 변수의 목록을 변경해야 하며 grep이 경우 해당 변수가 손실될 수 있습니다 set -o posix. 쉘에 없는 경우프로세스 교체, 대신 임시 파일을 사용하거나 파일 설명자에 대한 플랫폼별 액세스(예 /dev/fd: .


반면, 자신의 지역 변수와 함수를 지우고 싶다면 다음을 수행하세요.

exec bash

이로 인해 이러한 효과가 발생합니다(일부 구성 파일을 다시 읽고 쉘 옵션에 대한 로컬 변경 사항이 손실될 수도 있음).

관련 정보