Bourne 쉘 제품군에서 쉘 변수는 모두 대문자입니다. 즉, 특정 변수가 환경 변수인지 여부 만 알 수는 없습니다. 어떤 Bourne 쉘 변수가 로컬인지 어떻게 결정합니까 (현재 쉘 내에서만 정의)?
답변
변수가 내보내 졌는지 여부를 확인하려면 declare
다음을 사용하십시오 .
$ foo=a bar=b
$ export foo
$ declare -p foo bar
declare -x foo="a"
declare -- bar="b"
답변
가장 휴대하기 쉬운 방법은 export -p
입니다.
export -p
내 보낸 변수를 나열합니다. 이것은 보통처럼 declare -x
, 경우에 쉘이있다 declare
.
현재 사용중인 Bourne 스타일 쉘 export -p
은 POSIX에 필요한 대로를 지원해야합니다 .
때 -p가 지정, 수출은 표준 출력에 다음과 같은 형식으로 내 보낸 모든 변수의 이름과 값을 작성한다
"export %s=%s\n", <name>, <value>
이름 이 설정된 경우 :
"export %s\n", <name>
이름 이 설정되지 않은 경우
표준 은 변수의 값이 일반적으로 =
과제 의 오른쪽에서 나중에 사용할 수 있도록 표시되는 방법을 설명 합니다. 이것은 인용 될 수 있음을 말하는 것입니다. 다른 쉘은 다르게 표시 할 수 있지만 동일한 효과가 있습니다. Dash 와 같이 내장 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 호환 방식으로 동작하도록 명시 적으로 지시되지 않는 한 비표준 형식을 사용합니다. In 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
.
우분투 16.04 LTS에서 공식적으로 패키지 된 각 쉘 버전 으로 해당 명령을 테스트했습니다 .
답변
내 보내지 않은 변수 declare
는 bash 의 명령 출력에서 볼 수 있습니다 .
변수 되는 수출은 출력에서 볼 수 declare -x
또는 export
bash는 명령.