Я новичок в bash. Я не совсем понимаю, как работают функции в этом языке.
Я написал этот код:
#!/usr/bin/env sh
choice_func() {
echo "$choice"
}
echo "Enter your choice:"
read choice
choice_func
Исследуя свой код, я понял, что забыл отправить значение в choice
качестве входных данных при вызове choice_func()
. Но он работает правильно! как это возможно, что функция не получила входные данные, но может ли echo
?
решение1
Вы считываете значение в переменную choice
в основной части скрипта. Эта переменная имеет глобальную область видимости (за неимением лучшего слова), что означает, что она будет видна и внутри функции.
Обратите внимание, что если бы вы считывали значение внутри функции, то переменная все равно имела бы глобальную область видимости и была бы видна за пределами функции (после вызова функции). Это было бы так, если бы вы не объявили ее как local
with 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
Потому что вы спроектировали свою функцию без необходимости аргументации, вот и все.