Как вы избегаете персонажей в heredoc?
Я работаю со скриптом 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/;
}
3 ответа
Решение
От bash(1)
справочная страница:
Если какие-либо символы в слове заключены в кавычки, разделитель является результатом удаления кавычек в слове, а строки в документе здесь не раскрываются.
cat > /etc/nginx/sites-available/default_php <<"END"
Просто с обратной косой чертой:
cat > /tmp/boeboe <<END
server {
listen 80 default;
server_name _;
root /var/www/\$host';
}
END
@Xeoncross (и все это попадает сюда через результаты поисковых систем): можно отключить подстановку переменных, заключив стоп-токен в одинарные кавычки:
cat > /tmp/boeboe << 'END'
server {
listen 80 default;
server_name _;
root /var/www/$host;
}
# Example : here is another occurrence of '$host' which won't be substituted either
# When single-quoting the stop token, you don't have to escape all '$myVariable' anymore
END