:在bash脚本中将JSON写入文件的错误替换错误

时间:2018-05-16 10:39:14

标签: bash macos

我的bash脚本如下:

#!/bin/sh

set -e

cat <<EOF > config.json
{
    "host": "READER",
    "server-url": "${server.url}",
    "port": 8080,
}
EOF

当我通过./generateJson.shbash generateJson.sh运行文件时,我收到错误

line 5: ..... : bad substitution

我已经设置了本地变量server.url。 如果我在同一个终端会话中运行echo $server.url,则会分配一个字符串。

坏的替代错误是什么意思? 为什么会这样?

我看过很多帖子说使用#!/bin/bash或其他方法来确保它在bash上运行而不是破折号。但这没什么区别。

1 个答案:

答案 0 :(得分:2)

bash(或/bin/sh)中的变量不能在其名称中包含点。这意味着${server.url}无法展开,并且由于它与已知参数替换语法不对应,因此shell会抱怨您看到的错误。

为您的变量选择其他名称,例如server_url

如果您的变量实际上被称为server,并且您想要将.url添加到其值,请在here-document中使用$server.url

如果要在文档中插入文字字符串${server.url},请将$转义为\$,或使用'EOF'\EOF引用整个here-document(仅在开头,而不是在结尾)。