函数可以回显尚未接收到的输入值

函数可以回显尚未接收到的输入值

我是bash新手。我对这种语言中函数的工作方式感到困惑。

我写了这段代码:

#!/usr/bin/env sh

choice_func() {
        echo "$choice"
}

echo "Enter your choice:"
read choice
choice_func

在研究我的代码时,我意识到我忘记choice在调用时发送作为输入的值choice_func()。但它工作正常!该函数怎么可能没有得到输入,但是可以吗echo

答案1

您将值读入choice脚本主要部分的变量中。该变量具有全局作用域(需要一个更好的词),这意味着它在函数内部也是可见的。

请注意,如果您要读取函数内部的值,则该变量仍然具有全局作用域并且在函数外部可见(在函数调用之后)。除非您将其声明locallocal 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

因为您已经设计了不需要参数的函数,仅此而已。

相关内容