空格通过回声折叠>>


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>

在追加到目标文件时如何保留空白?我已经进行了搜索,但是所有类似的问题都不会在不重写脚本的情况下应用于我的脚本。

Answers:


9

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

打电话后

echo foo    bar

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

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

echo "foo    bar"

将打印所有四个空格。


附带一提:我发现这echo $TEMPLATE行之有效。它也应该折叠多个空格。
丹尼斯

是! 就是这样 完全有道理,但我没有意识到是这种情况。另外,它echo $TEMPLATE之所以有效,是因为我周围有引号,但我忽略了将其复制到我的帖子中,我认为这并不重要。我错了!
Jeff

1
@Jeff请参阅以下内容:命令和参数
slhck

1
@Jeff,在寻求帮助时,剪切和粘贴而不是重新键入非常重要。
glenn jackman

@glennjackman我以为我可以摆脱打字的麻烦,因为脚本太短了,而由于我在码头上工作,复制粘贴会很痛苦。我错了。学过的知识。谢谢你的提示。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.