空白被回声折叠 >>

Jef*_*eff 9 bash

我正在创建一个脚本来读取文件的内容,操作内容并附加到另一个文件(特别是虚拟主机文件)。输出文件中的格式和空格很重要,但是当我写入内容时,空格会被去除。

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
Run Code Online (Sandbox Code Playgroud)

所以第一个回声会产生类似的东西

<VirtualHost *:80>
    ServerAdmin webmaster@domain
    DocumentRoot "root/web"
    ServerName domain
    ErrorLog "root/logs/error_log"
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但进入文件的字符串是

<VirtualHost *:80> ServerAdmin webmaster@domain DocumentRoot "root/web" ServerName domain ErrorLog "root/logs/error_log" </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

如何在附加到目标文件时保留空格?我已经搜索过这个,但所有类似的问题都不适用于我的脚本而不重写它。

Den*_*nis 8

与其他所有程序一样,echo 将空格分隔的字符串解释为不同的参数。

调用后

echo foo    bar
Run Code Online (Sandbox Code Playgroud)

shell 传递给 echo 的唯一数据是第一个参数是foo,第二个参数是bar

要将包含空格的整个字符串作为单个参数传递,请将其括在双引号中:

echo "foo    bar"
Run Code Online (Sandbox Code Playgroud)

将打印所有四个空格。