我正在编写一个bash脚本,在函数名中使用感叹号非常方便。
示例:
function hello! {
echo goodbye
}
function hello {
echo hello
}
它有效!
查看specs后,我发现了这个:
的名称的的 一个单词,由字母,数字和下划线组成,以字母或下划线开头。名称用作shell变量和函数名称。也称为标识符。
我觉得我在这里打破规则。这是错的吗?将来这会弄得一团糟吗?究竟发生了什么?
答案 0 :(得分:5)
由于它违反了Bash规范,我会说你正在利用Bash中的一个bug,因此当修复bug时你的代码可能无法正常工作。放下!
答案 1 :(得分:4)
出于好奇心,为什么在函数名中使用感叹号会更方便?
一般来说,出于便携性原因,您可能不想使用爆炸声;只是因为特定操作系统上的解释器接受它,如果你需要在其他地方部署该脚本,其他口味/版本略有不同的解释器可能不会接受。
答案 2 :(得分:3)
我不确定这种情况的含义,但如果规范明确说明了这一点,我会说除此之外的任何事情都是未定义的行为,应该避免。
答案 3 :(得分:2)
使用它不是一个好主意!如果您希望代码可移植,请在函数名称中。 bash --posix或调用bash为“sh”都拒绝“你好!”作为函数名称。但我怀疑bash默默地允许异常的函数名称(“hello?”“hello-”和“hello /”也起作用,仅举几例)因为函数的一个重要用途是允许用户覆盖正常命令和这些命令(例如ls,rm等)可以包含文件系统允许的任何类型的字符。
注意“你好!”作为变量名称不起作用。