我的bash脚本如下:
#!/bin/sh
set -e
cat <<EOF > config.json
{
"host": "READER",
"server-url": "${server.url}",
"port": 8080,
}
EOF
当我通过./generateJson.sh
或bash generateJson.sh
运行文件时,我收到错误
line 5: ..... : bad substitution
我已经设置了本地变量server.url。
如果我在同一个终端会话中运行echo $server.url
,则会分配一个字符串。
坏的替代错误是什么意思? 为什么会这样?
我看过很多帖子说使用#!/bin/bash
或其他方法来确保它在bash上运行而不是破折号。但这没什么区别。
答案 0 :(得分:2)
bash
(或/bin/sh
)中的变量不能在其名称中包含点。这意味着${server.url}
无法展开,并且由于它与已知参数替换语法不对应,因此shell会抱怨您看到的错误。
为您的变量选择其他名称,例如server_url
。
如果您的变量实际上被称为server
,并且您想要将.url
添加到其值,请在here-document中使用$server.url
。
如果要在文档中插入文字字符串${server.url}
,请将$
转义为\$
,或使用'EOF'
或\EOF
引用整个here-document(仅在开头,而不是在结尾)。