저는 환경 변수를 처음 접했고 환경 변수를 스크립트에 전달하고 재정의하는 방법을 테스트하고 있습니다.
동작을 테스트하기 위해 testenv.sh
다음 이름의 간단한 스크립트를 만들었습니다.
#!/bin/bash
echo $COLOR
그래서 내가 달릴 때
$ env COLOR=RED ./testenv.sh
예상되는 stdout 을 얻습니다 RED
.
그러나 내 질문은 다음 명령을 실행하는 이유입니다.
$ env COLOR=RED echo $COLOR
위와 같은 결과를 얻지 못합니다. 실제로는 빈 표준 출력입니다.
답변1
$COLOR
env
호출되기 전에 쉘에 의해 확장됩니다 /bin/echo
.
env
변수를 확장하는 쉘 스크립트를 호출하지 않으면 작동하지 않습니다.
심지어:
COLOR=RED echo $COLOR
새 환경을 설정하기 전에 쉘 변수를 확장하기 때문에 예상대로 작동하지 않습니다.
두 줄로 나누어야 합니다.
COLOR=RED
echo $COLOR
예상대로 작동하도록 만드세요.
전화하는 경우:
env COLOR=RED sh -c 'echo $COLOR'
작은따옴표가 변수 확장을 방지하고 새 환경에서 새 쉘이 실행될 때 변수 확장이 지연되기 때문에 작동합니다.