La función puede hacer eco del valor que no se ha recibido como entrada

La función puede hacer eco del valor que no se ha recibido como entrada

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 choicecomo 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 choiceen 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 localmenos que lo declararas local choicedentro 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 choicea 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.

información relacionada