提问人:st0ve 提问时间:9/29/2023 更新时间:9/29/2023 访问量:41
Tab 多行变量到 heredoc
Tab multiline variable to heredoc
问:
我正在尝试将多行变量添加到将放入 markdown 文件中的 heredoc 中。
我的脚本如下所示:
markdown=$(cat <<-EOF
<details>
<summary>TEST</summary>
${output}
</details>
EOF
)
echo "$markdown" >> test.md
其中,多行字符串:output
this
is a
multiline
string
当我运行脚本时,输出如下所示:
<details>
<summary>TEST</summary>
this
is a
multiline
string
</details>
我怎样才能得到它,以便不仅输出变量的第一行被正确地按选项卡列出?我尝试通过 sed 运行变量并添加选项卡,但这不起作用
答:
1赞
KamilCuk
9/29/2023
#1
你必须缩进它。你自己。例如,使用 sed 在每行前面添加 4 个空格:
cat <<-EOF
<details>
<summary>TEST</summary>
$(sed 's/^/ /' <<<"$output")
</details>
EOF
您可以将换行符替换为换行符和 4 个空格:
cat <<-EOF
<details>
<summary>TEST</summary>
${output//$'\n'/$'\n' }
</details>
EOF
评论
0赞
st0ve
9/29/2023
像魅力一样工作!谢谢
0赞
Ed Morton
9/29/2023
#2
如果您希望从字面上处理前导选项卡,那么不要告诉 shell 不要从字面上处理它们,即删除您在第一个 EOF 之前添加的:-
cat <<EOF
whatever
EOF
不是你问的问题,但不要从这里的文档中填充变量,然后将其回显到一个文件,只需将输出重定向到一个文件:cat
cat <<EOF > file
whatever
EOF
或者,如果您想将文本存储在变量中,请不要使用 here-doc:
markdown="<details>
<summary>TEST</summary>
$output
</details>"
printf '%s\n' "$markdown" > file
评论
-
-EOF
-