나는 이와 같은 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