Функция может выводить значение, которое не было получено в качестве входных данных.

Функция может выводить значение, которое не было получено в качестве входных данных.

Я новичок в bash. Я не совсем понимаю, как работают функции в этом языке.

Я написал этот код:

#!/usr/bin/env sh

choice_func() {
        echo "$choice"
}

echo "Enter your choice:"
read choice
choice_func

Исследуя свой код, я понял, что забыл отправить значение в choiceкачестве входных данных при вызове choice_func(). Но он работает правильно! как это возможно, что функция не получила входные данные, но может ли echo?

решение1

Вы считываете значение в переменную choiceв основной части скрипта. Эта переменная имеет глобальную область видимости (за неимением лучшего слова), что означает, что она будет видна и внутри функции.

Обратите внимание, что если бы вы считывали значение внутри функции, то переменная все равно имела бы глобальную область видимости и была бы видна за пределами функции (после вызова функции). Это было бы так, если бы вы не объявили ее как localwith local choiceвнутри функции.

Для получения дополнительной информации об области действия переменной оболочки см., например,

Чтобы передать значение переменной choiceв функцию, используйте

choice_func "$choice"

Затем функция может получить доступ к этому значению в $1своем первом позиционном параметре:

choice_func () {
    echo "$1"
}

или

choice_func () {
   local choice="$1"

   # choice is now local and separate from the variable
   # with the same name in the main script.

   echo "$choice"
}

Это правильный способ передать значение функции безполагаясьна глобальных переменных в скрипте оболочки.

решение2

Потому что вы спроектировали свою функцию без необходимости аргументации, вот и все.

Связанный контент