하위 프로세스를 호출하기 전에 다른 변수를 사용하여 환경 변수를 설정하려면 어떻게 해야 합니까?

하위 프로세스를 호출하기 전에 다른 변수를 사용하여 환경 변수를 설정하려면 어떻게 해야 합니까?

나는 이와 같은 bash 스크립트를 가지고 있습니다

# print.sh
# export FOO=test would work too
FOO=test ./foo-proj # Something that cares about FOO (shell script or just a binary)

이것은 작동합니다. 그런데 왜 이렇게 하는지 알고 싶습니다...

#print.sh
blah="FOO=test"
$blah ./foo-proj

이 오류가 발생합니다 ./print.sh: line 2: FOO=test: command not found. bash와 마찬가지로 이제 FOO=test변수 선언 대신 명령을 해석합니다. 이 문제를 해결할 방법이 있나요?

답변1

일부 옵션:

env -- "$blah" ./foo-proj

env는 ./foo-proj환경에서 사물을 호출합니다. $blah이 경우 변수 이름이 유효한 쉘 변수 이름으로 제한되지 않는다는 장점이 있습니다. 예를 들어, 유효한 셸 변수 이름이 아닌 경우 "even"이라는 환경 변수를 blah='+++=xxx'전달 해야 할 수도 있습니다 .++++++

(export -- "$blah"; exec ./foo-proj)

또는:

eval  " $blah ./foo-proj"

where는 eval인수로 전달되고 " FOO=test ./foo-proj"문자열은 쉘 코드로 평가됩니다(여기서 =리터럴이므로 할당으로 간주됩니다).

$blah하지만 이면 blah='FOO=test;reboot;'다시 시작되므로 주의하세요 .

답변2

$blah귀하의 경우 bash는 환경 변수로 감지되지 않고 include로 감지되는 것 같습니다 =.

다음과 같은 작업을 수행해야 합니다.

blah="test"
FOO=$blah ./foo-proj

관련 정보