9

Я создаю сценарий, который читает содержимое файла, манипулирует содержимым и добавляет его в другой файл (в частности, файл виртуальных хостов). Форматирование и пробелы в выходном файле важны, но когда я пишу содержимое, пробелы удаляются.

VHOST_PATH="/etc/apache2/extra/httpd-vhosts.conf"
TEMPLATE_PATH="./template.conf"
TEMPLATE=$(<TEMPLATE_PATH)
# manipulating $TEMPLATE
echo $TEMPLATE                   #outputs correct whitespace
echo $TEMPLATE >> $VHOST_PATH    #does not output correct whitespace

Таким образом, первое эхо производит что-то вроде

<VirtualHost *:80>
    ServerAdmin webmaster@domain
    DocumentRoot "root/web"
    ServerName domain
    ErrorLog "root/logs/error_log"
</VirtualHost>

но строка, которая попадает в файл

<VirtualHost *:80> ServerAdmin webmaster@domain DocumentRoot "root/web" ServerName domain ErrorLog "root/logs/error_log" </VirtualHost>

Как сохранить пробелы при добавлении в целевой файл? Я искал это, но все подобные вопросы не относятся к моему сценарию, не переписав его.

1 ответ1

9

Как и любая другая программа, echo интерпретирует строки, разделенные пробелами, как разные аргументы.

После звонка

echo foo    bar

единственные данные, которые передаются в echo оболочкой, - это первый аргумент foo а второй - bar .

Чтобы передать всю строку, содержащую пробелы, в качестве одного аргумента, заключите ее в двойные кавычки:

echo "foo    bar"

напечатает все четыре пробела.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .