¿Hay alguna convención para el nombre de la variable global que tenga el resultado de la function?

Una forma típica para que una function de shell "devuelva" su resultado es asignarla a alguna variable global.

¿Hay alguna convención / mejores prácticas sobre el nombre de esta variable?

Solutions Collecting From Web of "¿Hay alguna convención para el nombre de la variable global que tenga el resultado de la function?"

REPLY se usa comúnmente para eso. Se usa read y select en bash , ksh y zsh al less.

En la documentation de zsh :

RESPUESTA
Este parámetro está reservado por convención para pasar valores de cadena entre scripts de shell y builtins de shell en situaciones donde una llamada de function o una networkingirección son imposibles o indeseables. El command integrado leído y el command complejo seleccionado pueden establecer RESPUESTA, y la generación del nombre de file establece y examina su valor al evaluar ciertas expresiones. Algunos modules también emplean RESPUESTA para propósitos similares.

respuesta
Como RESPUESTA, pero para valores de matriz en lugar de cadenas.

Sin embargo, tenga cuidado con las implicaciones potenciales al cambiar el tipo de esa variable.

Otro enfoque sería pasar el nombre de la variable como argumento:

 get_date() { local date date=$(date) eval "$1=\$date" } 

Eso no funciona si se llama a get_date con una variable llamada date . ksh93 aborda eso introduciendo namerefs que son una forma de referencer variables en el scope de la persona que llama. Recientemente, bash ha agregado soporte para nameref, pero hacen reference a variables en el mismo ámbito (solo por nombre), por lo que no son útiles para eso.

 function get_date { typeset -n var=$1 var=$(date) } 

En ksh93 , eso funciona incluso si se llama como get_date var . Hay forms de hacerlo funcionar en bash , mksh y yash explotando un error de unset , pero no iría allí ya que el error podría solucionarse en el futuro.

Otra forma sería no usar variables locales en sus funciones que establecen variables arbitrarias que no sean los parameters de position $1 , $2 … Sin embargo, eso puede hacer que el código sea bastante ilegible. Véase, por ejemplo, la implementación de una function de shell getopts_long .