问题描述
我想将更长的文本放入shellscript变量中,并使用herefile和反斜杠,如以下示例所示。我在ubuntu 18.04和ubuntu 20.04上看到了不同的行为(都使用/ bin / bash,utf-8:
param="$(cat <<'EOF'
a\
b
EOF
)"
echo $param > ./testfile.txt
在Ubuntu 18.04上的输出(目录./testfile.txt):
ab
在Ubuntu 20.04上的输出:
a\ b
为什么输出不同?
PS:使用EOF而不是'EOF'时,两种版本的输出均相同:
ab
解决方法
这是版本5.0中的错误修复:
kk。修复了导致bash从中删除反斜杠-换行符对的错误 此处文档的主体,在命令中带有引号的定界符 替代。
在4.4中,它被删除,以便cat
看到a
和b
在其输入中紧邻。现在,它们被保留了,但是反斜杠是param
值中的文字字符,并且在分词过程中丢弃了以下换行符,因此输出了词a\
和b
由echo
隔开。
如果引用$param
,则会看到换行符。
$ echo "$param"
a\
b