bash 스크립트를 사용하여 새 스크립트 출력: 교체해야 하는 변수와 교체하지 말아야 하는 변수의 혼합

bash 스크립트를 사용하여 새 스크립트 출력: 교체해야 하는 변수와 교체하지 말아야 하는 변수의 혼합

bash 변수 대체에 문제가 있습니다. 여기 제가 하려는 일에 대한 어리석은 예가 있습니다. Bash 스크립트에서 새 스크립트를 출력해야 합니다. 한 줄( echo예제 참조)에는 교체해서는 안 되는 변수와 교체해야 하는 변수가 혼합되어 있습니다.

#!/bin/bash
REPLACE=`whoami`
cat << EOF > mynewscript.sh
    read DONTREPLACE < /home/$REPLACE/localinput.txt
    echo $DONTREPLACE > /home/$REPLACE/somefile.log
EOF
exit 0

이것은 실제 예는 아니지만 요점을 설명합니다. 절대 경로를 미리 알아야 하고 $REPLACE가 원본 스크립트에서 평가되기를 원한다고 가정해 보겠습니다. 하지만 내 스크립트에서 $DONTREPLACE가 평가/교체되는 것을 원하지 않습니다. $DONTREPLACE새 스크립트의 출력은 정확히 동일해야 합니다.

따라서 이 문서를 문서화할 때 "EOF"를 인용하는 것은 작동하지 않습니다.

내가 이것을 잘 설명했으면 좋겠다.

다른 해결책은 모르겠습니다. 어떤 아이디어라도 감사하지만 매우 간단한 아이디어/솔루션을 선호합니다. 우아할 필요는 없습니다.

답변1

를 사용하여 앞의 내용을 \이스케이프 해야 합니다 . 아래 예제와 출력을 참조하세요.$DONOTREPLACE

REPLACE=10
DONOTREPLACE=20
cat <<EOF
> echo $REPLACE
> echo \$DONOTREPLACE
> EOF

echo 10
echo $DONOTREPLACE

답변2

내 생각에 bash를 사용한다면 더 나은 해결책은 "EOF" 마커를 이스케이프 처리하는 것입니다. 이와 같이:

cat > mytest << \EOF
$HOME
EOF

cat mytest
$HOME

관련 정보