
Soy nuevo en esto. Estoy confundido acerca de la forma en que funcionan las funciones en este idioma.
He escrito este código:
#!/usr/bin/env sh
choice_func() {
echo "$choice"
}
echo "Enter your choice:"
read choice
choice_func
Mientras investigaba mi código, me di cuenta de que había olvidado enviar el valor de choice
como entrada al llamar choice_func()
. ¡Pero funciona correctamente! ¿Cómo es posible que a la función no se le haya dado la entrada pero se puede echo
?
Respuesta1
Lees un valor en la variable choice
en la parte principal del script. Esta variable tiene alcance global (a falta de una palabra mejor), lo que significa que también será visible dentro de la función.
Tenga en cuenta que si leyera el valor dentro de la función, entonces la variable aún tendría alcance global y sería visible fuera de la función (después de la llamada a la función). Este sería el caso a local
menos que lo declararas local choice
dentro de la función.
Para obtener más información sobre el alcance de la variable de shell, consulte, por ejemplo
Para pasar el valor de la variable choice
a la función, utilice
choice_func "$choice"
Luego, la función puede acceder a este valor en $1
, su primer parámetro posicional:
choice_func () {
echo "$1"
}
o
choice_func () {
local choice="$1"
# choice is now local and separate from the variable
# with the same name in the main script.
echo "$choice"
}
Esta es la forma correcta de pasar un valor a una función sinconfiandosobre variables globales en un script de shell.
Respuesta2
Porque has diseñado tu función sin necesidad de argumentos, eso es todo.