이 질문은 다음 질문과 유사합니다. 쉘 스크립트를 사용하여 변수의 내용을 인쇄할 수 있습니까? (간접 인용)
파일에 있는 것은
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