Existem problemas com hifens em funções, aliases e executáveis?

23

Em meus testes (no Bash e no Z Shell), não vi problemas em definir funções ou aliases ou scripts de shell executáveis que possuem hífens no nome, mas não estou confiante de que isso esteja bem em todos os shells e em todos os casos de uso.

O motivo pelo qual eu gostaria de fazer isso é que um hífen é mais fácil de digitar do que um sublinhado e, portanto, mais rápido e suave.

Um dos motivos pelos quais hesito em confiar que não é um problema é que, em alguns idiomas (Ruby, por exemplo), o hífen seria interpretado como um sinal de menos, mesmo sem espaços em torno dele. Não me surpreenderia se algo como isso pudesse acontecer em algumas camadas, onde o hífen é interpretado como sinalizando uma opção mesmo sem espaço.

Outra razão pela qual eu suspeito é que meu editor de texto estraga o destaque da sintaxe para funções com hifens. (Mas é claro que é inteiramente possível que isso seja apenas um bug em sua configuração de realce de sintaxe para scripts de shell.)

Existe algum motivo para evitar hífens?

    
por iconoclast 16.11.2014 / 05:02

2 respostas

28

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.
por 16.11.2014 / 05:15
3

Eu sei que é muito tarde, mas talvez você possa contornar o problema de tornar o sublinhado mais acessível.

xmodmap -e "keycode  20 =  underscore minus"

Isso mudará o sublinhado com hífen (menos).

Então, agora, você troca o hífen, mas um sublinhado é digitado sem mudança.

Seu código de acesso pode ser diferente, no entanto, acho que depende do seu teclado; o meu passa a ser 20. Apenas deixe-me saber se você precisa de ajuda para encontrar o código que você precisa usar.

    
por 05.04.2016 / 20:40