¿Cómo emular devolver valores arbitrarios desde funciones de shell?

Las funciones de Shell son solo declaraciones y no devuelven valores. ¿Alguien puede compartir las mejores prácticas para escribir funciones que devuelven valores en bash?

Digamos que tengo una function que une dos cadenas:

JoinStrings() { returnValue="$1$2" } 

¿Cómo reutilizo esta function en mi código? ¿Cómo puedo hacer que returnValue sea ​​devuelto a la persona que llama? ¿Debo usarlo como global después de esta llamada de function? Eso lleva a muchos errores con variables globales en todas partes … ¿Cómo lograr la reutilización del código en el shell?

En Unix y GNU, la salida estándar de la function se puede considerar como el valor de retorno.

Aquí hay un ejemplo usando la expansión de commands de shell $(...) :

 JoinStrings() { echo "$1$2" } joined_strings=$(JoinStrings string1 string2) echo string1 and string2 joined are $(JoinStrings string1 string2) 

Hay una statement de return shell para su uso en funciones, que establece el código de salida (código de estado) del command. El código de salida es un integer pequeño.