답변:
나는 당신이 용어에 대해 혼란스러워 생각합니다.
"환경 변수"는 자식 프로세스가 상속 할 쉘 변수 일뿐입니다.
예제에서하고있는 것은 쉘 변수를 만드는 것입니다. 내보낼 때까지 환경에 없습니다.
MY_HOME="/home/my_user"
export MY_HOME
거의 모든 쉘 (csh, tcsh 제외)에 "MY_HOME"이라는 변수를 넣습니다.
이 특별한 경우에는 큰 따옴표가 불필요합니다. 효과가 없습니다. 부분 문자열을 큰 따옴표로 묶지 만 변수 대체를 수행하는 데 사용하는 모든 쉘을 허용합니다. 작은 따옴표 그룹 하위 문자열로 대체를 방지합니다. 예제 할당에는 변수가 없으므로 큰 따옴표는 작은 따옴표로 표시되었을 수 있습니다.
V='some substrings grouped together' # assignment
X="Put $V to make a longer string" # substitution and then assignment
Y=`date` # run command, assign its output
Z='Put $V to make a longer string' # no substition, simple assignment
내보낼 때까지 환경에 아무것도 없습니다.
MY_HOME="/home/my_user"
라는 쉘 변수를 설정합니다 MY_HOME
. 쉘은 프로그래밍 언어이며 변수 (파라미터라고도 함)가 있습니다. 이 할당 후에 변수의 값을 사용할 수 있습니다 (예 : with) echo "$MY_HOME"
.
쉘 변수는 내부 쉘 개념입니다. 해당 쉘 인스턴스가 종료되면 MY_HOME
잊혀집니다. 모든 프로그램이 알고 있고 자녀에게 전달하는 것은 환경 변수 입니다.
셸 내에서 환경 변수와 셸 변수는 매우 비슷한 방식으로 작동합니다. 실제로 일어나는 것은 쉘에서 부모로부터 상속받은 모든 환경 변수가 쉘 변수가된다는 것입니다. 반대로, 셸 스크립트에 정의 된 셸 변수는 내 보내면 환경 변수가됩니다 .
export MY_HOME="/home/my_user"
쉘 변수가 자동으로 환경 변수가되지 않는 이유는 부분적으로 스크립트가 실수로 시작한 프로그램에 의미있는 변수 이름을 사용하고 일부는 역사적 일 수도 있기 때문입니다.
export
변수 이름을 변경할 때마다 아주 오래된 쉘을 사용해야 했지만 모든 최신 쉘은 환경 변수에 대한 할당을 추적하여 다음 스 니펫이 에코합니다 bar
.
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
또한, 일부 아주 오래된 쉘에 대해 별도의 명령이 필요 myvar=foo
하고이 export myvar
있지만, 모든 현대 쉘 이해 export myvar=foo
.
set -a
모든 쉘 변수 지정이 변수를 자동으로 내보내도록 실행할 수 있으므로 해당 쉘에서 먼저 실행 한 경우 myvar=foo
와 동일합니다 .export myvar=foo
set -a
인용은 대부분 직교입니다. 변수에 할당하는 값에 쉘에 특수한 문자가 포함되어 있지 않으면 따옴표가 필요하지 않습니다. 특수 문자가 있으면 작은 따옴표 나 큰 따옴표 또는 백 슬래시 또는 그 조합으로 보호해야합니다. 이것은 일반 myvar=value
구문과 export
유틸리티 모두에 적용됩니다.
할당 구문과 구문에는 하나의 차이점이 export
있습니다. 쉘은 필드 (워드) 분할 및 경로 이름 확장 (글 로빙)을$foo
수행하여 변수 대체 결과를 추가로 확장 합니다. 의 값이있는 경우 있음이 수단 이며 , 다음 인쇄합니다 단일 공백은 현재 디렉토리에있는 파일 목록 하였다. 이것은 거의 바람직하지 않으므로 경로 대체 또는 필드 분할이 필요하다는 것을 모르는 경우 변수 대체 에 항상 큰 따옴표를 사용 하는 일반적인 원칙 입니다. 간단한 할당의 경우 실제로의 값 을myvar
hello *
echo $myvar
hello
echo "$myvar"
othervar=$myvar
myvar
othervar
할당에서 글 로빙 및 단어 분리가 금지되기 때문에 여러 단어를 만들지 만 한 단어가 필요하기 때문입니다. export
그러나이 분배는 적용되지 않습니다 . 따라서 간단한 규칙을 기억하려면 변수 대체에 항상 큰 따옴표를 사용하십시오.