2012-01-10 54 views
2

我在写一个bash脚本,在函数名中使用感叹号非常方便。bash函数名称中的感叹号 - 我应该吗?

例子:

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

和它的作品!

通过specs寻找后,我发现这一点:

仅由字母,数字和下划线的字,并用字母或下划线开始。名称用作shell变量和函数名称。也被称为标识符。

我觉得我在这里违反规则。这是错的吗?这会在将来搞砸吗?实际上发生了什么?

回答

4

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

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

+0

那么我正在写的函数是做一些错误检查的包装,所以我希望它们很短。包装与!在失败时退出,其他包装仅打印警告并且不退出。它使事情变得非常清楚。 – peter 2012-01-10 20:56:04

+1

这可以通过使用“_e”(xits)而不是“!”来完成以及。无需使用潜在的兼容性问题/错误/其他任何不在规格中的东西;) – Timo 2012-03-29 11:27:34

3

我不确定在这种情况下的影响,但如果规范说明了这一点清楚,我会说任何超出这是未定义的行为,应该避免。

5

既然它违反了Bash规范,我会说你正在利用Bash中的一个bug,所以当bug修复时你的代码可能无法工作。丢掉!

2

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

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