bash脚本-在cat中使用并展开变量

bash脚本-在cat中使用并展开变量,bash,variables,string-interpolation,heredoc,Bash,Variables,String Interpolation,Heredoc,在我的bash脚本中,我有以下内容: myapphome=/home/username/Documents/myapp cat << 'EOT' > "$myapphome"/some.properties dir.root="$myapphome"/app_data EOT 但实际上是: dir.root="$myapphome"/app_data 我做错了什么?我的意思是我想在我的some.propertie

在我的bash脚本中,我有以下内容:

myapphome=/home/username/Documents/myapp

cat << 'EOT' > "$myapphome"/some.properties
dir.root="$myapphome"/app_data
EOT
但实际上是:

dir.root="$myapphome"/app_data

我做错了什么?我的意思是我想在我的some.properties文件中展开$myapphome。

如果希望bash在here文档中展开变量,请不要引用终止符:

cat“$myapphome”/some.properties
目录根=$myapphome/app_数据
EOT
另外,从here文档中删除双引号,扩展不会删除它们

请参见
manbash

如果未引用
EOT
,则此处文档的所有行都将进行参数扩展、命令替换和算术扩展,忽略字符序列
\
,并且必须使用
\
引用字符
\
$
`


只需删除终止符中的单引号。当您不想在herdoc中展开变量时,将使用引号:

cat“$myapphome”/some.properties
目录根=$myapphome/app_数据
EOT

您可能还需要删除变量周围的双引号;)

耶。。工作得很好。当你分享男人狂欢节的细节时,我不得不避开另外两个$sign。我的Alfresco自动安装脚本现在可以正常工作了-非常感谢你帮我节省了一天的时间。这实际上与
cat
无关;与此相关的是壳牌对here文档的处理。所涉及的问题是相同的,无论这里的文件附加到什么过程。是的,对。现在我明白了为什么shell脚本被称为丑陋而强大的脚本语言。英雄联盟
dir.root="$myapphome"/app_data