POSIX e hífens: sem garantia
De acordo com o padrão POSIX, nome da função deve ser um nome válido e um nome pode consistir em:
3.231 Name
In the shell command language, a word consisting solely of underscores, digits, and alphabetics from the portable character set. The first character of a name is not a digit.
Além disso, um alias deve ser válido alias name , que pode consistir em:
3.10 Alias Name
In the shell command language, a word consisting solely of underscores, digits, and alphabetics from the portable character set and any of the following characters: '!', '%', ',', '@'.Implementations may allow other characters within alias names as an extension. (Emphasis mine.)
Um hífen não é listado entre os caracteres que devem ser permitidos nos dois casos. Então, se eles são usados, a portabilidade não é garantida.
Exemplos de conchas que não suportam hífens
dash
é o shell padrão ( /bin/sh
) na família debian-ubuntu e não suporta hifens em nomes de função:
$ a-b() { date; }
dash: 1: Syntax error: Bad function name
Curiosamente, ele suporta hífens em aliases, embora, como observado acima, essa seja uma característica de implementação , não um requisito:
$ a_b() { printf "hello %s\n" "$1"; }
$ alias a-b='a_b'
$ a-b world
hello world
O shell busybox (shell Almquist) também não suporta hifens em nomes de função:
$ a-b() { date; }
-sh: Syntax error: Bad function name
Resumo do suporte do Hyphen pela Shell
Os shells a seguir são conhecidos por oferecer suporte a hifens em nomes de função:
- ksh, bash, zsh
Os seguintes shells são conhecidos não para suportar hífens em nomes de função:
- ash (busybox), csh, tcsh, traço
Conclusões
- Os hífens não são padrão. Fique longe deles, se você quiser compatibilidade entre as conchas.
- Use sublinhados em vez de hífens: os sublinhados são aceitos em todos os lugares.