Usar traços é ruim se você quiser ser portável, o padrão permite apenas alfanuméricos e sublinhados , então os traços podem não funcionar em todos os shells:
$ dash -c 'foo-bar() { echo foo-bar; }; foo-bar'
dash: 1: Syntax error: Bad function name
(Busybox e ksh também não os aceitam; Bash, Zsh e mksh fazem.)
Isso não é um problema se você sabe que está usando o Bash, então se você gosta de traços, você pode usá-los em nomes de função. No entanto, se você quiser evitar o uso indevido de uma função no lugar de um nome de variável, observe que, por exemplo, $foo-bar
e ${foo-bar}
são ambas sintaxe de shell válida. O primeiro expande a variável $foo
e anexa a string -bar
; o segundo se expande para o valor de $foo
ou, se não estiver definido, o valor fornecido bar
.