如何在Bash中用引号字符串保留换行符?

bob*_*bbs 84 bash

我正在创建一个脚本来自动创建apache虚拟主机.我的部分脚本是这样的:

MYSTRING="<VirtualHost *:80>

ServerName $NEWVHOST
DocumentRoot /var/www/hosts/$NEWVHOST

...

"
echo $MYSTRING
Run Code Online (Sandbox Code Playgroud)

但是,脚本中的换行符将被忽略.如果我回显字符串,就会吐出一行.

如何确保打印换行符?

Mar*_*tin 165

添加引号使其工作:

echo "$MYSTRING"
Run Code Online (Sandbox Code Playgroud)

这样看:

MYSTRING="line-1
line-2
line3"

echo $MYSTRING
Run Code Online (Sandbox Code Playgroud)

这将被执行为:

echo line-1 \
line-2 \
line-3
Run Code Online (Sandbox Code Playgroud)

即,echo使用三个参数,打印每个参数,它们之间有空格.

如果你添加引号$MYSTRING,结果命令将是:

echo "line-1
line-2
line-3"
Run Code Online (Sandbox Code Playgroud)

echo使用单个字符串参数,其中包含三行文本和两个换行符.

  • 谢谢,现在我终于理解为什么echo这样工作 - 因为它将输入解析为参数!我希望我早点读到这个. (3认同)