많은 답변 eval과 echo작업 종류가 있지만 여러 줄, 쉘 메타 문자 이스케이프 시도, bash에 의해 확장되지 않은 템플릿 내부의 이스케이프 등과 같은 다양한 작업을 중단합니다.
나는 같은 문제가 있었고 내가 말할 수있는 한 모든 것을 올바르게 처리하는이 쉘 함수를 작성했습니다. 이것은 bash의 명령 대체 규칙으로 인해 템플릿에서 후행 줄 바꿈 만 제거하지만 다른 모든 것이 그대로 유지되는 한 문제가되지는 않았습니다.
apply_shell_expansion() {
declare file="$1"
declare data=$(< "$file")
declare delimiter="__apply_shell_expansion_delimiter__"
declare command="cat <<$delimiter"$'\n'"$data"$'\n'"$delimiter"
eval "$command"
}
예를 들어, parameters.cfg변수를 설정하는 쉘 스크립트 인 a와 template.txt해당 변수를 사용하는 템플릿 인 a 와 함께 다음과 같이 사용할 수 있습니다 .
. parameters.cfg
printf "%s\n" "$(apply_shell_expansion template.txt)" > result.txt
실제로 저는 이것을 일종의 경량 템플릿 시스템으로 사용합니다.
eval하십시오 .