小编典典

带有额外空格的多行字符串(保留缩进)

all

我想使用以下内容将一些预定义的文本写入文件:

text="this is line one\n
this is line two\n
this is line three"

echo -e $text > filename

我期待这样的事情:

this is line one
this is line two
this is line three

但是得到了这个:

this is line one
 this is line two
 this is line three

我很肯定每个之后都没有空格\n,但是额外的空间是怎么出来的?


阅读 105

收藏
2022-03-08

共1个答案

小编典典

Heredoc 听起来更方便。它用于向 excat等命令解释程序发送多个命令

cat << EndOfMessage
This is line 1.
This is line 2.
Line 3.
EndOfMessage

后面的字符串<<表示停止的位置。

要将这些行发送到文件,请使用:

cat > $FILE <<- EOM
Line 1.
Line 2.
EOM

您还可以将这些行存储到变量中:

read -r -d '' VAR << EOM
This is line 1.
This is line 2.
Line 3.
EOM

这会将行存储到名为 的变量VAR中。

打印时,请记住变量周围的引号,否则您将看不到换行符。

echo "$VAR"

更好的是,您可以使用缩进使其在您的代码中更加突出。这次只需添加一个-之后<<即可阻止标签出现。

read -r -d '' VAR <<- EOM
    This is line 1.
    This is line 2.
    Line 3.
EOM

但是你必须在代码中使用制表符而不是空格来缩进。

2022-03-08