Será ruim que uma função ou nome de script contenha traço '-' em vez de sublinhar '_'?

0

Se eu nomear uma função ou script com traço - em vez de sublinhar _ entre palavras, isso seria ruim? Por exemplo, function duplicate-me() ou duplicate-me.sh .

No bash, um nome de variável pode conter sublinhado, mas nenhum traço. Se eu nomear funções e scripts usando traço em vez de sublinhado, então o bash nunca terá a intenção de interpretar um nome como uma variável, e posso esperar que o bash forneça uma mensagem de erro se eu usar mal esse nome como variável.

Obrigado.

    
por Tim 18.11.2018 / 00:07

3 respostas

4

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 .

    
por 18.11.2018 / 00:32
3

Um nome da função do shell POSIX não pode conter traços:

[A Name is] a word consisting solely of underscores, digits, and alphabetics from the portable character set. The first character of a name is not a digit.

zsh , bash , pdksh e fish permite traços em nomes de funções, mas ksh93 e dash não (e fish não é realmente um shell POSIX para começar). Acho que seria prudente evitar traços nos nomes das funções.

Variáveis e funções não compartilham espaço de nomes, e as regras de nomenclatura POSIX para nomes de variáveis são as mesmas que para nomes de funções de shell POSIX, e não conheço nenhum shell que permita traços em nomes de variáveis.

Os scripts podem ter traços em seus nomes e também qualquer outro caractere, exceto o caractere nul e / , como são nomes de arquivo.

    
por 18.11.2018 / 00:32
1

Sim, não há problema em usar traços nos nomes das funções no bash.

Aqui está um exemplo de um projeto usando nomes de função com traços neles.

Na verdade, outros caracteres que você pode achar incomuns também são possíveis em nomes de função. Aqui está outro script de exemplo no mesmo projeto , que usa :: s como parte de nomes de função, como algum tipo de namespace. (Note, no entanto, que o último usa sublinhados, enquanto o primeiro usa traços, então a consistência não é tão strong lá ...)

Como mencionado por @choroba, o namespace para nomes de função e nomes de variáveis é separado, não há realmente uma situação em que um nome possa se referir a um ou outro, então o fato de eles terem conjuntos diferentes de caracteres permitidos não realmente crie qualquer problema para nomes que são válidos apenas como um e não o outro.

    
por 18.11.2018 / 00:32