명령을 사용하여 같은 줄에서 실행될 때 "환경 변수"는 어떻게 작동합니까? [복사]

명령을 사용하여 같은 줄에서 실행될 때 "환경 변수"는 어떻게 작동합니까? [복사]

Python 스크립트에 환경 변수를 제공하고 다음을 사용하여 즉시 인쇄할 수 있습니다.

$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))"
bar

그러나 다음의 경우에는 동일하게 적용되지 않습니다 echo.

$ FOO="bar" echo $FOO
 
$ echo $PWD
/home/nntin

첫 번째 질문: 왜 인쇄가 안 됐나요 bar?


여러 명령을 실행하는 경우 환경 변수는 첫 번째 명령에만 적용됩니다.

$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))" && python -c "import os; print(os.environ.get('FOO'))"
bar
None

다음을 사용하여 문제를 해결할 수 있습니다.

$ FOO="bar" python -c "import os; print(os.environ.get('FOO'))" && FOO="bar" python -c "import os; print(os.environ.get('FOO'))"
bar
bar

하지만 많은 환경 변수를 전달하면 다루기가 어려워집니다.

두 번째 질문: 두 가지 모두에 어떻게 적용하나요? 예를 들어 두 개의 명령을 차례로 실행하고 싶지만 &&명령줄에서 환경 변수를 두 번이 아닌 한 번만 정의하고 싶습니다.

동일한 명령줄에서 환경 변수를 설정하는 것을 선호합니다.환경 변수는 변경될 수 있으므로 여러 명령을 순차적으로 실행하는 것보다 한 줄의 명령을 실행하는 것이 더 쉽습니다. 차라리 하나의 값만 변경하고 싶습니다.

추신: 혼란스러운 제목을 이해해 주시기 바랍니다. 이름이 무엇인지, 어디서 찾을 수 있는지 모르겠습니다. 이와 같은 코드를 실행하면 환경 변수는 다음 명령줄에서 사용할 수 없기 때문에 영구적으로 설정되지 않습니다. 그러나 코드에서는 설정된 환경 변수처럼 작동합니다. 제목과 설명을 자유롭게 변경해 보세요.

답변1

첫 번째 예에서는 다음과 같습니다.

명령줄을 평가하고, "bar" 값을 환경 변수 "FOO"에 로드하고, Python 코드를 실행하고, 환경 변수 "FOO"를 평가하고 해당 내용을 인쇄합니다: "bar"

두 번째 예: 명령줄이 평가되고 "bar" 값이 "FOO" 변수에 로드되지만 echo $FOO$FOO와 동시에 평가됩니다.아직 로드되지 않음이므로 빈 문자열을 에코합니다.

세 번째 예에서는 &&두 명령이 분리되어 있으며 임시 환경 변수는 보존되지 않습니다. 넌 탈출할 수 있어

FOO='bar' ( python -c "import os; print(os.environ.get('FOO'))" && FOO="bar" python -c "import os; print(os.environ.get('FOO'))" )

관련 정보