POSIX和连字符:不保证
根据POSIX标准,函数名称必须是有效名称,并且名称可以包含:
3.231名称
在shell命令语言中,仅由下划线,数字和便携式字符集中的字母组成的单词。名称的第一个字符不是数字。
另外,别名必须是有效的别名,该别名可以包括:
3.10别名
在外壳命令语言中,仅由下划线,数字和可移植字符集中的字母和以下任何字符组成的单词:'!','%',',','@'。
实现可能允许别名中的其他字符作为扩展名。 (强调我的。)
在这两种情况下必须允许的字符中没有列出连字符。因此,如果使用它们,则不能保证可移植性。
不支持连字符的Shell的示例
dash
是/bin/sh
debian-ubuntu家族的默认shell(),它不支持函数名中的连字符:
$ a-b() { date; }
dash: 1: Syntax error: Bad function name
有趣的是,它确实支持别名中的连字符,但是,如上所述,这是实现特性,而不是要求:
$ a_b() { printf "hello %s\n" "$1"; }
$ alias a-b='a_b'
$ a-b world
hello world
busybox外壳程序(Almquist外壳程序)也不支持函数名称中的连字符:
$ a-b() { date; }
-sh: Syntax error: Bad function name
壳牌对连字符的支持摘要
已知以下外壳程序在函数名称中支持连字符:
已知以下shell 不支持函数名称中的连字符:
结论
- 连字符是非标准的。如果要跨外壳兼容,请远离它们。
- 使用下划线代替连字符:下划线在任何地方都可以接受。
-
是邪恶的。我在看着你,CSS。:)