해석된 환경 변수를 사용하여 파일 내용을 인쇄하는 방법

해석된 환경 변수를 사용하여 파일 내용을 인쇄하는 방법

이 질문은 다음 질문과 유사합니다. 쉘 스크립트를 사용하여 변수의 내용을 인쇄할 수 있습니까? (간접 인용)

파일에 있는 것은

a=${env1}is a good ${env2}
b=${env3}is a good ${env2}

이 파일의 내용을 다음에 표시하고 싶습니다.

a=tom is a good cat
b=jerry is a good mouse

나는 이것을 시도했습니다 :

tmp=`cat a.conf`
echo $tmp # environmental variables are not interpreted, and file format changed, hard to read
echo ${!tmp} # no ...

또한 위의 아이디어는 약간 우회적입니다.

답변1

다음과 같은 파일이 있는 경우:

a=${env1} is a good ${env2}
b=${env3} is a good ${env4}

대체 변수를 사용하여 출력을 생성하려면 패키지의 일부인 이 envsubst명령을 사용할 수 있습니다. gettext위의 내용이 에 있다고 가정하면 다음을 example.txt.in실행할 수 있습니다.

env1=tom env2=cat env3=jerry env4=mouse envsubst < example.txt.in

출력을 얻습니다.

a=tom is a good cat
b=jerry is a good mouse

ensubst사용할 수 없는 경우 다음을 수행할 수 있습니다.

#!/bin/sh

tmpfile=$(mktemp scriptXXXXXX)
trap 'rm -f $tmpfile' EXIT

cat > "$tmpfile" <<END_OUTSIDE
cat <<END_INSIDE
$(cat)
END_INSIDE
END_OUTSIDE

sh "$tmpfile"

스크립트 이름을 다음과 같이 지정 envsubst.sh하고 이전 예제와 유사하게 실행합니다.

env1=tom env2=cat env3=jerry env4=mouse sh envsubst.sh < example.txt.in

관련 정보