heredoc에서 캐릭터를 어떻게 탈출합니까?


22

heredoc 내부의 변수를 바꾸지 않으려는 bash 스크립트로 작업하고 있습니다. heredoc을 A) 변수 이름을 구문 분석하는 대신 이스케이프 처리하거나 B) 전체 문자열을 그대로 유지하려면 어떻게 설정합니까?

cat > /etc/nginx/sites-available/default_php <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/$host; <--- $host is a problem child
}
END

그대로 파일에 주입을 마치면 다음과 같이 남습니다.

server {
    listen 80 default;
    server_name _;
    root /var/www/;
}

답변:


33

로부터 bash(1)매뉴얼 페이지

단어의 문자 가 따옴표로 묶이면 구분 기호word 에서 따옴표를 제거한 결과이며 여기 문서의 줄은 확장되지 않습니다.

cat > /etc/nginx/sites-available/default_php <<"END"

3
+1 "제한 문자열"을 이스케이프 처리 할 수도 있습니다 ( \END). 참조 tldp.org/LDP/abs/html/here-docs.html#EX71C
존 맥카시

작은 따옴표도 작동
Joao Costa

Korn 쉘 (ksh)에도 동일한 메커니즘이 작동합니다.
jhfrontz

19

백 슬래시와 함께 :

cat > /tmp/boeboe <<END
server {
    listen 80 default;
    server_name _;
    root /var/www/\$host';
}
END

각 값을 벗어나지 않고 변수 값의 주입을 비활성화하는 방법을 알고 있습니까?
Xeoncross 2016 년

2
이그나시오의 말, 그러나 나는 몰랐다 :)
Halfgaar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.