it-swarm-es.tech

Corregir mayúsculas y mayúsculas en el script de mayúsculas

Me encuentro con muchos scripts de Shell con variables en mayúsculas, y siempre he pensado que hay un malentendido grave con eso. Mi entendimiento es que, por convención (y quizás por necesidad hace mucho tiempo), las variables de entorno están en mayúsculas.

Pero en entornos de scripts modernos como Bash, siempre he preferido la convención de minúsculas para las variables temporales y las mayúsculas solo para las variables exportadas (es decir, para el entorno) . Por ejemplo:

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

Esa ha sido siempre mi opinión sobre las cosas. ¿Existen fuentes autorizadas que estén de acuerdo o en desacuerdo con este enfoque, o es simplemente una cuestión de estilo?

163
JasonSmith

Por convención, las variables de entorno (PAGER, EDITOR, ...) y las variables internas de Shell (Shell, BASH_VERSION, ...) están en mayúsculas. Todos los demás nombres de variables deben estar en minúsculas.

Recuerde que los nombres de las variables distinguen entre mayúsculas y minúsculas; esta convención evita accidentalmente anular variables ambientales e internas.

Siguiendo esta convención, puede estar seguro de que no necesita conocer todas las variables de entorno utilizadas por las herramientas o shells de UNIX para evitar sobrescribirlas. Si es tu variable, minúscula. Si lo exportas, ponlo en mayúsculas.

222
lhunath

Cualquier convención de nomenclatura seguida consistentemente siempre ayudará. Aquí hay algunos consejos útiles para nombrar las variables de Shell:

  • Utilice mayúsculas y guiones bajos para las variables y constantes exportadas, especialmente cuando se comparten en múltiples scripts o procesos. Use un prefijo común siempre que sea aplicable para que las variables relacionadas se destaquen y no entren en conflicto con variables internas de Bash que son todas mayúsculas.

    Ejemplos:

    • Variables exportadas con un prefijo común: JOB_HOMEJOB_LOGJOB_TEMPJOB_RUN_CONTROL
    • Constantes: LOG_DEBUGLOG_INFOLOG_ERRORSTATUS_OKSTATUS_ERRORSTATUS_WARNING
  • Use "caso de serpiente" ( todo en minúsculas y guiones bajos ) para todas las variables que están incluidas en un solo script o bloque.

    Ejemplos: input_filefirst_valuemax_amountnum_errors

    Caso mixto cuando la variable local tiene alguna relación con una variable de entorno, como: old_IFSold_HOME

  • Use un guión bajo para variables y funciones "privadas". Esto es especialmente relevante si alguna vez escribe una biblioteca Shell donde las funciones dentro de un archivo de biblioteca o entre archivos necesitan compartir variables, sin chocar con nada que pueda tener un nombre similar en el código principal.

    Ejemplos: _debug_debug_level_current_log_file

  • Evitar caja de camello . Esto minimizará los errores causados ​​por errores tipográficos de casos. Recuerde, las variables de Shell son mayúsculas y minúsculas .

    Ejemplos: inputArraythisLooksBAD, numRecordsProcessed, veryInconsistent_style


Ver también:

17
codeforester

Yo hago lo que tu haces Dudo que haya una fuente autorizada, pero parece un estándar de facto bastante extendido.

6
Draemon

Si las variables de Shell se van a exportar al entorno, vale la pena considerar que POSIX (Edición 7, edición 2018) Definición de variable de entorno especifica:

Los nombres de variables de entorno utilizados por las utilidades en el volumen de Shell y Utilities de POSIX.1-2017 consisten únicamente en letras mayúsculas, dígitos y el subrayado (_) de los caracteres definidos en el Conjunto de caracteres portátil y no comienzan con un dígito.

...

El espacio de nombres de las variables de entorno que contienen letras minúsculas se reserva para aplicaciones. Las aplicaciones pueden definir cualquier variable de entorno con nombres de este espacio de nombres sin modificar el comportamiento de las utilidades estándar.

4
Anthony Geoghegan

Es solo una convención muy extendida, dudo que haya alguna fuente "autorizada" para ella.

3
Alnitak

En realidad, el término "variables de entorno" parece ser una moneda bastante reciente. Kernighan y Pike en su libro clásico "El entorno de programación UNIX", publicado en 1984, hablan solo de "variables de Shell", ¡ni siquiera hay una entrada para "ambiente" en el índice!

3
anon

tiendo a usar ALL_CAPS tanto para el entorno como para variables globales. por supuesto, en Bash no hay un alcance de variable real, por lo que hay una buena parte de las variables utilizadas como globales (principalmente configuraciones y seguimiento de estado) y relativamente pocos 'locales' (contadores, iteradores, cadenas parcialmente construidas y temporarios)

1
Javier