0

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

这是我的 foo.sh:

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

echo "$1"
say_hello

输出对我来说看起来很奇怪:

hello
<>

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

4

2 回答 2

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.

于 2019-07-13T17:29:07.390 回答
0

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

say_hello, 中$1是指传递给该函数的第一个参数。但是,您在没有任何参数的情况下调用它,如下所示:

say_hello

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

say_hello $1

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

于 2019-07-15T20:24:34.443 回答