env 명령은 정확히 어떻게 작동합니까?

env 명령은 정확히 어떻게 작동합니까?

저는 환경 변수를 처음 접했고 환경 변수를 스크립트에 전달하고 재정의하는 방법을 테스트하고 있습니다.

동작을 테스트하기 위해 testenv.sh다음 이름의 간단한 스크립트를 만들었습니다.

#!/bin/bash
echo $COLOR

그래서 내가 달릴 때

$ env COLOR=RED ./testenv.sh

예상되는 stdout 을 얻습니다 RED.


그러나 내 질문은 다음 명령을 실행하는 이유입니다.

$ env COLOR=RED echo $COLOR

위와 같은 결과를 얻지 못합니다. 실제로는 빈 표준 출력입니다.

답변1

$COLORenv호출되기 전에 쉘에 의해 확장됩니다 /bin/echo.

env변수를 확장하는 쉘 스크립트를 호출하지 않으면 작동하지 않습니다.

심지어:

COLOR=RED echo $COLOR

새 환경을 설정하기 전에 쉘 변수를 확장하기 때문에 예상대로 작동하지 않습니다.

두 줄로 나누어야 합니다.

COLOR=RED
echo $COLOR

예상대로 작동하도록 만드세요.

전화하는 경우:

env COLOR=RED sh -c 'echo $COLOR'

작은따옴표가 변수 확장을 방지하고 새 환경에서 새 쉘이 실행될 때 변수 확장이 지연되기 때문에 작동합니다.

관련 정보