参数在功能中不可见

时间:2019-07-13 17:20:58

标签: bash function parameters positional-parameter

我正在编写一个脚本,需要在其中使用参数。

这是我的foo.sh:

say_hello()
{
  if [ "$1" == "hello" ]
  then
    echo "hello"
  else
    echo "<$1>"
  fi
}

echo "$1"
say_hello

输出对我来说很奇怪:

hello
<>

您能解释一下为什么在功能上我不能使用params吗?以及如何在函数中传递脚本参数?

2 个答案:

答案 0 :(得分:2)

传递给Shell中的函数的参数与传递给Shell本身的参数不同。

例如,如果print_script_args如下所示:

echo $1
echo $2

然后./print_script_args hello world将打印以下内容:

hello
world

如果print_function_args看起来像这样:

foo() {
    echo $1
    echo $2
}

foo bye world

然后./print_function_args hello planet将打印以下内容:

bye
world

-脚本的参数不起作用,因为输出的是传递给shell函数的参数,即bye world

答案 1 :(得分:0)

您需要使用输入参数调用say_hello函数。

say_hello中,$1指的是传递给该函数的第一个参数。您正在调用它而没有任何参数,例如:

say_hello

您想要的是将$1(从主脚本上下文)作为参数传递给say_hello函数,如下所示:

say_hello $1

在脚本中,$1表示从命令行运行时传递给脚本的第一个参数。在函数say_hello中,$1表示从脚本调用该函数时传递给该函数的第一个参数。