bash函数名称中的感叹号 - 我应该吗?

时间:2012-01-10 20:45:51

标签: bash naming

我正在编写一个bash脚本,在函数名中使用感叹号非常方便。

示例:

function hello! {
    echo goodbye
}
function hello {
    echo hello
}

它有效!

查看specs后,我发现了这个:

  

名称的       一个单词,由字母,数字和下划线组成,以字母或下划线开头。名称用作shell变量和函数名称。也称为标识符。

我觉得我在这里打破规则。这是错的吗?将来这会弄得一团糟吗?究竟发生了什么?

4 个答案:

答案 0 :(得分:5)

由于它违反了Bash规范,我会说你正在利用Bash中的一个bug,因此当修复bug时你的代码可能无法正常工作。放下!

答案 1 :(得分:4)

出于好奇心,为什么在函数名中使用感叹号会更方便?

一般来说,出于便携性原因,您可能不想使用爆炸声;只是因为特定操作系统上的解释器接受它,如果你需要在其他地方部署该脚本,其他口味/版本略有不同的解释器可能不会接受。

答案 2 :(得分:3)

我不确定这种情况的含义,但如果规范明确说明了这一点,我会说除此之外的任何事情都是未定义的行为,应该避免。

答案 3 :(得分:2)

使用它不是一个好主意!如果您希望代码可移植,请在函数名称中。 bash --posix或调用bash为“sh”都拒绝“你好!”作为函数名称。但我怀疑bash默默地允许异常的函数名称(“hello?”“hello-”和“hello /”也起作用,仅举几例)因为函数的一个重要用途是允许用户覆盖正常命令和这些命令(例如ls,rm等)可以包含文件系统允许的任何类型的字符。

注意“你好!”作为变量名称不起作用。