Bash 쉘 프로세스를 시작할 때 시작 파일에 지정된 것 외에 기본 환경 변수는 무엇입니까?
특정 bash 또는 sh 내장 변수(목록은"Bourne 쉘 변수"그리고"배쉬 변수"섹션)은 기본 환경 변수이지만 다른 bash 또는 sh 내장 변수는 그렇지 않습니까? 어떤 유형의 bash 또는 sh 내장 변수가 기본 환경 변수입니까?
존재하다환경 변수의 POSIX 정의Bash에 내장된 변수의 전부 또는 대부분은 기본적으로 환경 변수인 것 같지만 확실하지 않습니다.
답변1
일반적으로 프로세스상속하다상위 프로세스의 환경 변수입니다. 프로그램(예: 셸)이 달리 동의하지 않는 한 "기본" 환경 변수는 없습니다.
궁금하다면 명령을 사용하여 env -i
환경을 지우고 사용하여 printenv
환경을 표시할 수 있습니다. 몇 가지 예:
$ env -i printenv
$ env -i sh -c printenv
PWD=/home/peter
SHLVL=1
_=/usr/bin/printenv
$ echo printenv | env -i sh
PWD=/home/peter
SHLVL=1
_=/usr/bin/printenv
$ env -i sh --login -c printenv
...all kinds of variables from login scripts...
LANG=en_US.UTF-8
PWD=/home/peter
SHLVL=1
PATH=/usr/local/bin:/usr/bin:...
LESSOPEN=|/usr/bin/lesspipe.sh %s
_=/usr/bin/env
bash(1) 매뉴얼에는 이러한 변수 중 일부가 설명되어 있지만 불행하게도 이러한 변수가 존재하는지 여부에 대한 명확한 답변은 제공하지 않습니다.환경변수는 항상 설정되거나 설정되지 않습니다.
Bash의 다른 변수도 비슷한 방식으로 찾을 수 있습니다.
$ env -i -c set
BASH=/usr/bin/sh
...
BASH_VERSION='4.4.5(1)-release'
...
SHLVL=1
TERM=dumb
UID=1000
_=sh
이러한 변수 중 하나에 의존해야 하는 경우 다음을 확인하는 것이 좋습니다.배쉬 매뉴얼. 특히:
이제 bash 쉘이 열려 있다고 가정하십시오. 특정 변수를 서브쉘에서 사용할 수 있는지 알고 싶습니다. 이를 위해 declare -p NAME...
내장 함수를 사용하여 "각 NAME의 속성과 값을 표시할 수 있습니다. 예:
$ declare -p PWD
declare -x PWD="/home/peter"
$ declare -p foo
bash: declare: foo: not found
$ foo=bar
$ declare -p foo
declare -- foo="bar"
이 -x
속성은 변수를 다음과 같이 표시합니다.출구이는 하위 프로세스가 이 변수를 볼 수 있음을 의미합니다. 기존 변수로 이 작업을 수행하려면 export
내장 함수를 사용할 수 있습니다 .
$ export foo
$ declare -p foo
declare -x foo="bar"
Bash에서는 변수를 설정하고 이를 하위 프로세스에 사용 가능하게 만드는 것을 결합할 수 있습니다.
$ export foo=bar