bash脚本-在cat中使用并展开变量
在我的bash脚本中,我有以下内容: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
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