【问题标题】:bash script - use and expand variable in catbash 脚本 - 在 cat 中使用和扩展变量
【发布时间】:2021-03-08 17:03:52
【问题描述】:

在我的 bash 脚本中,我有这个:

myapphome=/home/username/Documents/myapp

cat << 'EOT' > "$myapphome"/some.properties
dir.root="$myapphome"/app_data
EOT

在 some.properties 中预期:

dir.root=/home/username/Documents/myapp/app_data

但实际上是:

dir.root="$myapphome"/app_data

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

【问题讨论】:

  • 这其实和cat无关;相关的是 shell 对 here 文档的处理。此处文档附加到哪个流程,所涉及的问题都是一样的。
  • 是的。现在我明白为什么 shell 脚本被称为丑陋而强大的脚本语言了。大声笑

标签: bash variables string-interpolation heredoc


【解决方案1】:

如果您希望 bash 扩展此处文档中的变量,请不要引用终止符:

cat << EOT > "$myapphome"/some.properties
dir.root=$myapphome/app_data
EOT

另外,从这里的文档中删除双引号,它们不会被扩展删除。

man bash:

如果EOT不被引用,则here-document的所有行都经过参数扩展、命令替换和算术扩展,字符序列\&lt;newline&gt;被忽略,必须使用\来引用字符\$`

【讨论】:

【解决方案2】:

只需从终止符中删除单引号即可。当您不想在 heredoc 中扩展变量时使用引号:

cat << EOT > "$myapphome"/some.properties
dir.root=$myapphome/app_data
EOT

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

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2015-12-13
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多