我是bash新手。我对这种语言中函数的工作方式感到困惑。
我写了这段代码:
#!/usr/bin/env sh
choice_func() {
echo "$choice"
}
echo "Enter your choice:"
read choice
choice_func
在研究我的代码时,我意识到我忘记choice
在调用时发送作为输入的值choice_func()
。但它工作正常!该函数怎么可能没有得到输入,但是可以吗echo
?
答案1
您将值读入choice
脚本主要部分的变量中。该变量具有全局作用域(需要一个更好的词),这意味着它在函数内部也是可见的。
请注意,如果您要读取函数内部的值,则该变量仍然具有全局作用域并且在函数外部可见(在函数调用之后)。除非您将其声明local
为local choice
函数内部的那样,否则就会出现这种情况。
有关 shell 变量作用域的更多信息,请参阅例如
要将变量中的值传递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"
}
这是将值传递给函数的正确方法,无需依靠shell 脚本中的全局变量。
答案2
因为您已经设计了不需要参数的函数,仅此而已。