Bourne 쉘 계열과 마찬가지로 쉘 변수에는 대문자 이름이 있습니다. 즉, 이름만 보면 특정 변수가 환경 변수인지 여부를 알 수 없습니다. 어떤 Bourne 쉘 변수가 로컬인지(현재 쉘에서만 정의됨) 확인하는 방법은 무엇입니까?
답변1
가장 이식성이 뛰어난 방법은 export -p
.
export -p
내보낸 변수를 나열합니다. 이것은 일반적으로 다음과 같습니다declare -x
,만약에귀하의 쉘에는 declare
.
현재 사용 중인 Bourne 스타일 쉘은 다음을 지원해야 합니다.export -p
, 이 때문에POSIX 요구 사항:
언제-피임명되다,출구내보낸 모든 변수의 이름과 값은 다음 형식으로 표준 출력에 기록되어야 합니다.
"export %s=%s\n", <name>, <value>
만약에이름설정되었으며 다음과 같습니다.
"export %s\n", <name>
만약에이름설정되지 않았습니다.
기준=
설명을 계속하면 일반적으로 변수 값이 표시되는 방식을 통해 나중에 할당 오른쪽에 사용할 수 있습니다. 즉, 참조할 수 있다는 의미입니다. 다른 껍질은 다르게 표시될 수 있지만 효과는 동일합니다. 내장 export -p
되지 않은 declare
쉘에서도 작동합니다 .스프린트.
$ dash -c 'export -p | grep HOME=' # busybox sh and other ash give the same output.
export HOME='/home/ek'
$ posh -c 'export -p | grep HOME=' # ksh93, mksh, lksh, and others give the same output.
export HOME=/home/ek
압축을 위해 출력을 파이프했지만 grep
필터링하지 않으면 내보낸 변수의 전체 목록을 얻게 됩니다. 귀하의 질문에 따르면 이것이 가장 유용하다고 생각되는 것 같습니다.
Bash와 같은 일부 셸은 POSIX 호환 방식으로 실행하도록 명시적으로 지시하지 않는 한 비표준 형식을 사용합니다. Bash의 export -p
기본값과 동일한 출력을 제공합니다 declare -x
.
$ bash -c 'export -p | grep HOME='
declare -x HOME="/home/ek"
$ bash -c 'POSIXLY_CORRECT= export -p | grep HOME='
export HOME="/home/ek"
$ bash -c 'set -o posix; export -p | grep HOME='
export HOME="/home/ek"
$ bash --posix -c 'export -p | grep HOME='
export HOME="/home/ek"
$ ln -s /bin/bash sh
$ ./sh -c 'export -p | grep HOME=' # Invoking bash as sh also puts it in POSIX mode.
export HOME="/home/ek"
POSIX 호환성이 활성화된 경우에도 Zsh는 비표준 형식을 표시합니다.
$ zsh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
$ zsh -c 'emulate -R sh; export -p | grep HOME='
typeset -x HOME=/home/ek
$ ln -s /bin/zsh sh
$ ./sh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
어떤 경우든 다음에 나오는 단어를 검색하여 이식 가능한 표현(인용 가능)을 추출할 수 있습니다 =
. 이는 바로 앞에 오지 않는 한 줄 앞의 단어에 의존하지 않습니다 =
. 예를 들어:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
알아채다아니요모든 항목이 필요합니다 =
. 이는 변수를 설정 해제할 수 있지만 내보낼 수 있기 때문입니다. 이러한 항목은 위의 명령에 의해 필터링되며 grep
원하는 것일 수도 있고 아닐 수도 있습니다.
export
대부분의 경우 출력을 확인하기를 원하므로 항목 앞에 , declare -x
또는 typeset -x
다른 것이 있는지는 신경 쓰지 않습니다 . 그런 다음 실행하세요 export -p
.
Ubuntu 16.04 LTS에서 이 명령을 테스트했습니다.공식 패키지 버전껍질 당.
답변2
변수가 내보내졌는지 확인하려면 다음을 사용하세요 declare
.
$ foo=a bar=b
$ export foo
$ declare -p foo bar
declare -x foo="a"
declare -- bar="b"
답변3
변수는아니요내보내기는 bash 명령의 출력에서 볼 수 있습니다 declare
.
변하기 쉬운예내보내기는 bash declare -x
또는 명령 출력에서 볼 수 있습니다.export