Heredoc不保留空行

Nar*_*asK 5 bash

在这里,我试图声明一个具有多行值的变量bash

$ GET="$(cat <<EOF
> GET / HTTP/1.1
> Host: 127.0.0.1:80
> 
> EOF
> )"
Run Code Online (Sandbox Code Playgroud)

这肯定有效,但是文档末尾的空白行丢失了:

$ echo "$GET"
GET / HTTP/1.1
Host: 127.0.0.1:80
$ cat <<< "$GET"
GET / HTTP/1.1
Host: 127.0.0.1:80
Run Code Online (Sandbox Code Playgroud)

and*_*lrc 5

实际上不是修剪尾随换行符的heredoc,而是命令替换。考虑使用read

$ IFS= read -r -d '' var << EOF
>   hello
> world
> 
> EOF
$ printf "%s" "$var"
  hello
world

$ 
Run Code Online (Sandbox Code Playgroud)

请注意,printf通常不打印尾随换行符,因此变量var实际上有两个尾随换行符。

或者,您可以简单地使用多行字符串:

var="  hello
world
"
Run Code Online (Sandbox Code Playgroud)