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 .