参数在函数中不可见

Parameter is not visible in function

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

这是我的 foo.sh:

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

echo ""
say_hello

输出对我来说很奇怪:

hello
<>

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

您在 shell 中传递给函数的参数与传递给 shell 本身的参数不同。

例如,如果 print_script_args 看起来像这样:

echo 
echo 

然后 ./print_script_args hello world 将打印:

hello
world

如果 print_function_args 看起来像这样:

foo() {
    echo 
    echo 
}

foo bye world

然后 ./print_function_args hello planet 将打印此:

bye
world

——脚本的参数什么都不做,因为打印的是传递给shell函数的参数,即bye world.

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

say_hello 中,</code> 指传递给该函数的第一个参数。你在调用它时没有任何参数,就像这样:</p> <pre><code>say_hello

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

say_hello 

在脚本中,</code> 是指从 command-line 传递给脚本的第一个参数 运行。在函数 <code>say_hello 中, 指的是从脚本调用时传递给函数的第一个参数。