参数在函数中不可见

Posted

技术标签:

【中文标题】参数在函数中不可见【英文标题】:Parameter is not visible in function 【发布时间】:2019-11-23 01:41:28 【问题描述】:

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

这是我的 foo.sh:

say_hello()

  if [ "$1" == "hello" ]
  then
    echo "hello"
  else
    echo "<$1>"
  fi


echo "$1"
say_hello

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

hello
<>

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

【问题讨论】:

函数参数与shell参数不同。 @SeanBright 你是完全正确的。谢谢。添加此评论作为答案,我会选择它。 OR say_hello "$@" 传递所有参数 【参考方案1】:

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

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

say_hello

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

say_hello $1

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

【讨论】:

【参考方案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

【讨论】:

以上是关于参数在函数中不可见的主要内容,如果未能解决你的问题,请参考以下文章

可见绑定在淘汰赛 js 中不起作用

JPanel 在 JFrame 中不可见

在函数体中不提及函数参数如何使用?

PHP邮件功能html内容在电子邮件中不可见

Django F() 表达式在函数参数中不起作用

React 使用link在url添加参数(url中不可见)