Upstart 和 bash 函数名称中包含“-”

Upstart 和 bash 函数名称中包含“-”

我继承了一些 bash 脚本,其中作者在函数名称中使用“-”而不是更常见的“_”,例如:

function a-b {
...
}

丑陋但在 bash 中合法。问题是我在一个暴发户脚本中找到了这个并得到了

x.sh:第 5 行:“ab”:不是有效的标识符

花了一段时间才意识到这是名称而不是函数内容。无论如何,在这种情况下重命名不是一个简单的选择,据我所知,暴发户使用/bin/sh/bin/bash解析?运行它的脚本。因此我猜测这个问题。

除了重命名之外,还有其他解决方法吗?

如果没有别的事,至少我希望这个问题能够警告其他人关于奇怪的 bash 编码风格的危险以及它们有时会如何反咬你一口。

答案1

来自暴发户食谱,更改默认外壳。有 3 个选项,前 2 个涉及将默认 shell 更改为/bin/sh其他选项。但第三个选项看起来可以解决您的特定问题。

摘抄

在您希望使用不同 shell 运行的作业配置文件中使用“此处文档”(假设您选择的 shell 支持它们):

script
/bin/bash <<EOT

echo "Hi - I am running under the bash shell"

date

echo "and so am I :)"

EOT
end script

相关内容