Bash correto e capitalização de variável de script de shell

Eu me deparo com muitos scripts de shell com variables ​​em letras maiúsculas e sempre achei que há um mal-entendido grave com isso. Meu entendimento é que, por convenção (e talvez por necessidade há muito tempo), as variables ​​de ambiente estão em maiúsculas.

Mas em ambientes de scripts modernos como o Bash, eu sempre preferi a convenção de nomes de letras minúsculas para variables ​​temporárias e as maiúsculas somente para variables ​​exportadas (ou seja, ambiente) . Por exemplo:

#!/usr/bin/env bash year=`date +%Y` echo "It is $year." export JAVA_HOME="$HOME/java" 

Essa sempre foi minha opinião sobre as coisas. Existem fonts autorizadas que concordam ou discordam dessa abordagem, ou é puramente uma questão de estilo?

Por convenção, variables ​​de ambiente ( PAGER , EDITOR , …) e variables ​​de shell internas ( SHELL , BASH_VERSION , …) são maiúsculas. Todos os outros nomes de variables ​​devem estar em minúsculas.

Lembre-se de que os nomes das variables ​​fazem distinção entre maiúsculas e minúsculas; esta convenção evita a sobreposição acidental de variables ​​ambientais e internas.

Mantendo essa convenção, você pode ter certeza de que não precisa conhecer todas as variables ​​de ambiente usadas pelas ferramentas ou shells do UNIX para evitar sobrescrevê-las. Se é sua variável, diminua-a. Se você exportá-lo, use maiúsculas.

Qualquer convenção de nomenclatura seguida consistentemente sempre ajudará. Aqui estão algumas dicas úteis para a nomeação de variables ​​do shell:

  • Use todas as letras maiúsculas e sublinhados para variables ​​e constantes exportadas, especialmente quando elas são compartilhadas entre vários scripts ou processos. Use um prefixo comum sempre que aplicável para que as variables ​​relacionadas se destaquem e não entrem em conflito com as variables ​​internas do Bash, que são todas maiúsculas.

    Exemplos:

    • Variáveis ​​exportadas com um prefixo comum: JOB_HOME JOB_LOG JOB_TEMP JOB_RUN_CONTROL
    • Constantes: LOG_DEBUG LOG_INFO LOG_ERROR STATUS_OK STATUS_ERROR STATUS_WARNING
  • Use “caso de cobra” ( todas as letras minúsculas e sublinhados ) para todas as variables ​​com escopo definido em um único script ou bloco.

    Exemplos: input_file first_value max_amount num_errors

    Caso misto quando a variável local tem algum relacionamento com uma variável de ambiente, como: old_IFS old_HOME

  • Use um sublinhado à esquerda para variables ​​e funções “privadas”. Isso é especialmente relevante se você escrever uma biblioteca de shell em que as funções dentro de um arquivo de biblioteca ou entre arquivos precisem compartilhar variables, sem nunca se chocar com algo que possa ser denominado de forma semelhante no código principal.

    Exemplos: _debug _debug_level _current_log_file

  • Evite o caso de camelo . Isso minimizará os erros causados ​​por erros de digitação. Lembre-se, as variables ​​do shell diferenciam maiúsculas de minúsculas .

    Exemplos: inputArray thisLooksBAD , numRecordsProcessed , veryInconsistent_style


Veja também:

  • As especificações da base de grupo aberto Edição 7 – Variáveis ​​de ambiente

Eu faço o que você faz. Eu duvido que exista uma fonte autorizada, mas parece um padrão de fato razoavelmente difundido.

É apenas uma convenção muito difundida, duvido que exista alguma fonte “autorizada” para isso.

Na verdade, o termo “variables ​​de ambiente” parece ser de cunhagem razoavelmente recente. Kernighan e Pike, em seu livro clássico “The UNIX Programming Environment”, publicado em 1984, falam apenas de “variables ​​shell” – não há nem mesmo uma input para “ambiente” no índice!

Eu costumo usar ALL_CAPS tanto para ambiente e variables ​​globais. é claro que no Bash não existe um escopo variável real, portanto há uma boa parte das variables ​​usadas como globais (principalmente configurações e rastreamento de estado) e relativamente poucas ‘locais’ (contadores, iteradores, sequências parcialmente construídas e temporárias)