Білий простір згортається з відлунням >>


10

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

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>

Як зберегти пробіл під час додавання до цільового файлу? Я шукав це, але всі подібні запитання не стосуються мого сценарію, не переписуючи його.

Відповіді:


9

Як і будь-яка інша програма, echo інтерпретує рядки, розділені пробілом, як різні аргументи.

Після дзвінка

echo foo    bar

Єдині дані, які передаються на лунку луні, - це перший аргумент, fooа другийbar .

Щоб передати цілий рядок, що містить пробіли як єдиний аргумент, укладіть його у подвійні лапки:

echo "foo    bar"

надрукує всі чотири пробіли.


Зі сторони: мені здається, що дивно, що echo $TEMPLATEце спрацювало б. Він також повинен зруйнувати кілька пробілів.
Денніс

Так! Це було все. Це має повний сенс, але я не розумів, що це було так. Крім того, echo $TEMPLATEпрацював, тому що в мене були цитати, але я нехтував його копією на свій пост. Я не вважав, що це важливо. Я помилявся!
Джефф

1
@Jeff Дивіться наступне: Команди та аргументи
slhck

1
@Jeff, критично важливо, шукаючи допомоги, вирізати та вставити замість повторного введення.
glenn jackman

@glennjackman Я думав, що я можу піти з переробки тексту, оскільки сценарії були такі короткі, а копіювання + вставлення буде болем, оскільки я працюю в терміналі. Я помилявся. засвоєний урок. дякую за пораду.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.