小编典典

如何将heredoc值分配给Bash中的变量?

all

我有这个多行字符串(包括引号):

abc'asdf"
$(dont-execute-this)
foo"bar"''

如何在 Bash 中使用 heredoc 将其分配给变量?

我需要保留换行符。

我不想转义字符串中的字符,那会很烦人…


阅读 117

收藏
2022-03-16

共1个答案

小编典典

您可以通过以下方式避免无用的使用cat和更好地处理不匹配的引号:

$ read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF

如果您在回显变量时不引用该变量,则会丢失换行符。引用它可以保留它们:

$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''

如果您想在源代码中使用缩进来提高可读性,请在小于号后使用破折号。缩进必须仅使用制表符(无空格)来完成。

$ read -r -d '' VAR <<-'EOF'
    abc'asdf"
    $(dont-execute-this)
    foo"bar"''
    EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''

相反,如果您想在结果变量的内容中保留制表符,则需要从IFS. 此处文档 ( EOF) 的终端标记不得缩进。

$ IFS='' read -r -d '' VAR <<'EOF'
    abc'asdf"
    $(dont-execute-this)
    foo"bar"''
EOF
$ echo "$VAR"
    abc'asdf"
    $(dont-execute-this)
    foo"bar"''

可以通过按Ctrl-在命令行中插入选项卡V
Tab。如果您使用的是编辑器,取决于哪个编辑器,它可能也可以工作,或者您可能必须关闭自动将制表符转换为空格的功能。

2022-03-16