BASH에서 수출은 무엇을합니까? [복제]


75

가능한 중복 :
bash에서“a = b”와“export a = b”의 차이점

인정하기는 어렵지만 export환경 변수가 정확히 무엇을하는지는 결코 이해하지 못했습니다 . 변수를 내 보내지 않으면 때로는 자식 프로세스에서 볼 수 없지만 때로는 가능한 것처럼 보입니다. 내가 말할 때 정말 무슨 일이야

export foo=5

언제 변수를 내 보내지 않아야합니까?


다음은이 주제에 대한 다른 유용한 질문에 대한 링크입니다. superuser.com/questions/143413/linux-environment-variables ... 아이러니 하게도이 질문은 bash에서 내보내기에 대한 쿼리에 대해 Google에서 처음으로 제기 된 질문이므로 .
오우거 시편 33


일반적인 용도 중 하나는 export.bashrc / .bash_profile에 문 을 추가 하여와 유사한 영구 전역 변수를 만드는 것 $HOME입니다.
Evan Plaice 2016 년

조심스럽게,이 이야기에는 처음 등장한 것보다 더 많은 것이 있습니다. 나는 당신이 내 대답을 확인하도록 초대합니다.
jasonleonhard

답변:


15

보낸 사람 man bash:

환경

프로그램이 호출되면 환경이라는 문자열 배열이 제공됩니다. 이름 = 값 형식의 이름-값 쌍 목록입니다.

쉘은 환경을 조작하는 몇 가지 방법을 제공합니다. 호출시, 쉘은 자체 환경을 스캔하고 발견 된 각 이름에 대한 매개 변수를 작성하여 자동으로 하위 프로세스로 내보내기 위해 표시합니다. 실행 된 명령은 환경을 상속합니다. exportdeclare -x 명령은 매개 변수와 기능에 추가 된 환경에서 삭제 될 수 있습니다. 환경의 매개 변수 값이 수정되면 새 값이 환경의 일부가되어 이전 값을 대체합니다. 실행 된 명령으로 상속 된 환경은 셸의 초기 환경으로 구성되며, 셸에서 값을 수정할 수 있고 unset 명령으로 제거 된 쌍이 적을 수 있으며 내보내기 및 declare -x명령을 통한 추가도 가능 합니다.


73
설명을위한 추가적인 노력없이 문서에서 발췌 한 IMHO 사본을 붙여서는 안됩니다.
Artur

29
그 발췌문은 명확하지 않으며 솔직히 나는 무슨 일이 일어나고 있는지 이해하지 못했습니다.
Trismegistos

4
@Artur : 반대로 : (에서 발췌 한) 문서가 질문에 대답하면 추가 설명이 필요하지 않습니다.
René Nyffenegger

1
@ RenéNyffenegger하지만 그렇지 않습니다. 적어도 BloodPhilia의 답변을 읽었을 때까지 나는 그것을 얻지 못했습니다.
Vladislav Rastrusny

1
Artur와 Trismegistos가 만든 요점은 누구나 붙여 넣기를 복사 할 수 있다는 것입니다. 일부 문서를 복사하여 붙여 넣거나 링크를 제공하는 것이 좋습니다. 실제로 권장되지만 추가 품질 설명이 있어야합니다. 또한 RenéNyffenegger와 같은 사람들이 필요하지 않은 경우 이러한 설명을 쉽게 무시할 수 있지만 도움이되는 사람들에게는 도움이 될 것입니다. 우리는 모두 배우려고 노력하고 있으며 이해하는 방법이 다양합니다. 이는 다양한 학습 스타일을 다루는 데 도움이되고 평가를 향상시킵니다.
jasonleonhard

99

내 보낸 변수는 자식 프로세스로 전달되지만 내 보내지 않은 변수는 전달되지 않습니다.


해당 문서를 가리킬 수 있습니까? 그보다 더 많은 정보를 찾고 있습니다. 예를 들어, 변수는 한 번만 내보내거나 변경 될 때마다 내
보내야

1
당신은 이것을 확인할 수 있습니다 : superuser.com/questions/143413/linux-environment-variables/…
BloodPhilia

3
경로에 무언가를 추가하고 (예 PYTHONPATHecho $PYTHONPATHexport
Kaushik Ghose

이 답변도 완전히 사실이 아닌 것 같습니다. 예를 들어 Bash 하위 셸은 하위 프로세스에 따라 $BASHPID다르지만 상위 셸에서 내 보내지 않은 변수를 읽을 수 있습니다. 간단한 증거 : x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x") 내 생각에 이것은 자식 프로세스가 하위 셸 일 때 발생하는 특별한 경우입니다.
JepZ

20

을 사용 export하면 내보내기 명령이 호출 된 쉘의 환경 변수 목록에 변수를 추가하고 쉘의 모든 환경 변수가 하위 프로세스에 전달되므로이를 사용할 수 있습니다.

쉘을 완료하면 환경이 파괴되므로 로그인 할 때 환경 변수가 .bashrc 파일에서 선언되고 내보내지는 이유는 다음과 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.