新贵和 bash 函数名称包含“-”

Nei*_*ill 6 shell bash upstart

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

function a-b {
...
}
Run Code Online (Sandbox Code Playgroud)

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

x.sh:第 5 行:`a-b'​​:不是有效标识符

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

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

如果不出意外,至少我希望这个问题能警告其他人奇怪的 bash 编码风格的危险,以及它们有时如何反咬你。

slm*_*slm 7

来自 Upstart 手册,更改默认外壳。有 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
Run Code Online (Sandbox Code Playgroud)