답변:
텍스트에서 알 수 있듯이 일반적인 쉘 명령에서와 같이 변수 를 참조하면됩니다 (예 : $VARNAME
또는 ${VARNAME}
). 그러나 쉘이 미리 확장하지 않도록해야합니다.
다음은이를 설명하는 몇 가지 예입니다 (가정 export FOO=BAR
).
$ echo '$FOO$FOO2' | envsubst
BAR
보시다시피 $ FOO2는 정의되지 않았으므로 ""로 대체되었습니다. 이제 다음을 통해 교체를 $ FOO로만 제한 할 수 있습니다.
$ echo '$FOO$FOO2' | envsubst '$FOO'
BAR$FOO2
""
대신에 사용 ''
하면 원하기 전에 대체로 이어집니다.
echo '$FOO$FOO2' | envsubst "$FOO"
$FOO$FOO2
(이것은 envsubst "BAR"
변수를 감지하지 않으므로 대체되는 효과적인 호출에 해당합니다 .)
는 AS man
-page 말했다에서 참조되는 모든 변수는 SHELL-FORMAT
우리가 심지어이 작업을 수행 할 수 있도록 대체된다 :
echo '$FOO$FOO2$FOO3' | envsubst '$FOO some more text ${FOO3}'
BAR$FOO2
보시다시피, SHELL-FORMAT
매우 유연합니다.
마지막으로 매개 변수를 --variables
사용하면 다음으로 대체 할 변수를 평가할 수 있습니다 SHELL-FORMAT
.
envsubst --variables '$FOO some more text ${FOO3}'
FOO
FOO3
위의 조기 대체 예제에서 이것은 오류를 표시했을 것입니다.
$ envsubst --variables "$FOO"
(empty string returned)
man
-page에 명시된 바와 같이 envsubst
stdinput을 처리하지 않습니다 --variables
.
다음은 올바르게 사용하는 방법을 이해하는 데 도움이 된 몇 가지 예입니다. envsubstonly가 매개 변수에 언급 된 변수를 대체한다는 것은 놀랍습니다.
$ export FOOX="foox"
$ export FOOY="fooy"
$ export FOOZ="fooz"
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst
x foox y fooy z fooz
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX'
x foox y $FOOY z $FOOZ
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOX $FOOZ'
x foox y $FOOY z fooz
$ echo 'x $FOOX y $FOOY z $FOOZ' | envsubst '$FOOZ $FOOY'
x $FOOX y fooy z fooz
나는 SHELL-FORMAT이 무엇을 의미하는지 이해하지 못했지만 왜 그렇게 이름이 붙여 졌는지 모르겠습니다. 그러나 위의 실험 후에 나는 그것이 무엇을하는지 알고 있다고 생각합니다.
그 말은 약간 혼란입니다. 도움말 텍스트를 더 세밀하게 바꾸려면 :
SHELL-FORMAT
환경 변수에 대한 참조를 포함하는 선택적 텍스트 명령 행 인수입니다. 텍스트에서 환경 변수를 참조하려면 변수 이름 앞에 접두사를 붙이십시오$
. : 예를 들어,Hello $FOO World $BAR
참조 환경 변수FOO
및BAR
. 나머지 문자열은 무시됩니다.SHELL-FORMAT
명령 행 인수가있는 경우 stdin을 통해 수신 된 텍스트에서 변수 대체가 발생하면SHELL-FORMAT
명령 행 인수 에서 참조되는 변수로 제한됩니다 .
따라서 질문에 명시 적으로 대답하려면 변수 이름 앞에 접두사를 붙이십시오 $
.