参数在函数中不可见
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 你是完全正确的。谢谢。添加此评论作为答案,我会选择它。 ORsay_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
。
【讨论】:
以上是关于参数在函数中不可见的主要内容,如果未能解决你的问题,请参考以下文章