【发布时间】:2010-11-13 03:45:12
【问题描述】:
我有这个多行字符串(包括引号):
abc'asdf"
$(dont-execute-this)
foo"bar"''
如何在 Bash 中使用 heredoc 将其分配给变量?
我需要保留换行符。
我不想转义字符串中的字符,那会很烦人...
【问题讨论】:
-
@JohnM - 我刚刚尝试了一个带有单引号
'EOF'的heredoc 分配,带有` in the content: if the second line hascd` 命令的转义换行符,我回来了:“.sh: line X : cd: 找不到命令";但如果我双引号"EOF";然后 bash 变量${A}不会被保存为字符串(它们会被扩展);但是然后,换行符 被保留 - 而且,我在第二行使用cd运行命令没有问题(并且'EOF'和“EOF”似乎与eval一起玩也很好,用于运行存储在字符串变量中的一组命令)。干杯! -
... 并添加到我之前的评论中: bash cmets "#" in double-qouted
"EOF"变量,如果通过eval $VAR调用,将导致脚本的所有其余部分被评论,因为这里 $VAR 将被视为单行;为了能够在多行脚本中使用 bash#cmets,还要在eval call:eval "$VAR"` 中添加双引号变量。 -
@sdaau:我在使用这种方法时遇到了
eval的问题,但由于它是evals 在其配置文件中定义的一些变量的某个包的一部分,所以没有追踪它。错误消息是:/usr/lib/network/network: eval: line 153: syntax error: unexpected end of file。我刚刚切换到另一个解决方案。