Как вы избегаете персонажей в heredoc?


22

Я работаю со скриптом bash, пытаясь помешать ему пытаться заменить переменные внутри моего heredoc. Как установить в 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)страницы руководства :

Если какие-либо символы в слове заключены в кавычки, разделитель является результатом удаления кавычек в слове , а строки в документе здесь не раскрываются.

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

2
То, что сказал Игнасио, но я этого не знал :)
Halfgaar
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.