특정 변수 만 envsubst로 교체 라고 말할 수는 있지만

를 통해 환경 변수 교체를 수행하려고 envsubst하지만 특정 변수 만 바꾸고 싶습니다.

문서에서 envsubst특정 변수 만 바꾸 라고 말할 수는 있지만 그렇게 할 수는 없습니다.

예를 들어 다음이 포함 된 파일이있는 경우 :

VAR_1=${VAR_1}
VAR_2=${VAR_2}

에 대한 envsubst참조 만 대체하도록 어떻게 실행해야 ${VAR_1}합니까?



답변

전화하기 전에 envsubst작은 따옴표를 사용하여 내보내기를 사용하여 다시 VAR_1수정해야합니다. 에서처럼 :

export VAR_1='somevalue'

자세한 내용은 다음을 참조하십시오.

복잡한 텍스트 파일에서 쉘 변수를 대체하는 방법


답변

매뉴얼 페이지 당 :

envsubst [OPTION] [SHELL-FORMAT]

SHELL-FORMAT이 제공되면 SHELL-FORMAT에서 참조되는 환경 변수 만 대체됩니다. 그렇지 않으면 표준 입력에서 발생하는 모든 환경 변수 참조가 대체됩니다.

SHELL 형식 문자열이 어디에 형태 쉘 변수를 참조하여 문자열 ” $variable또는 ${variable}[…] 변수 이름이 아닌 숫자로 시작하고 비어 있지 수 전적으로 영숫자의 구성 또는 ASCII 문자를 강조해야하며, 그렇지 않으면 이러한 변수 참조는 무시했습니다. ” .
따라서 각 변수 이름을 envsubst쉘 형식 문자열로 전달해야합니다 (물론, 문자 그대로로 전달되도록 이스케이프 / 따옴표로 묶어야합니다 envsubst). 예:

입력 파일 예 infile:

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

그리고 같은 일부 값

export  VAR1="one" VAR2="two" VAR3="three"

그런 다음 실행

envsubst '${VAR1} ${VAR3}' <infile

또는

envsubst '${VAR1},${VAR3}' <infile

또는

envsubst '${VAR1}
${VAR3}' <infile

출력

VAR1=one
VAR2=${VAR2}
VAR3=three

또는 백 슬래시를 선호하는 경우 :

envsubst \$VAR1,\$VAR2 <infile

생산

VAR1=one
VAR2=two
VAR3=${VAR3}