La creación de un subconjunto implica un fork()
, por lo que definitivamente tiene una sobrecarga en comparación con una variable local. Mientras que las subcapas son baratas — no se preocupe por su costo cuando necesite una — que no sean gratuitas.
Si su script va a ser muy utilizado y el rendimiento realmente importa (por lo que tendrá cientos de usuarios todos ejecutando al mismo tiempo, muchas veces al día), entonces puede que le preocupe el costo de rendimiento de la sub-shell. OTOH, si lo ejecutas una vez al mes y el script en su conjunto dura menos de 10 segundos, probablemente no lo harás.
Sin embargo, en términos de claridad, es mucho mejor ser explícito y declarar las variables —, reduce el riesgo de que se rompa la secuencia de comandos porque alguien viene y dice "claramente no se necesita esta subcapa" (y realmente no lo es, me gustaría eliminar las subcapas de tus funciones).
Observe la evolución de las secuencias de comandos de Perl. Comenzaron como un todo-gratis con variables que surgieron a pedido. Gradualmente se han vuelto más rigurosos, con un estilo normal ahora predeclare todas las variables. Hasta cierto punto, las shells han seguido un camino similar — pero no tan rigurosamente como Perl. Awk es también un estudio de caso interesante; sus funciones utilizan variables globales a menos que sean argumentos para la función, lo que lleva a que las funciones se escriban con 3 argumentos activos (por ejemplo) y 5 argumentos inactivos que definan efectivamente las variables locales. Es ligeramente excéntrico, aunque 'funciona'.
, así ejecutar el comando 'tiempo' más de 1000 pruebas y encontrar fuera de los gastos generales, creo que es pequeño o inexistente. – Anders