我正在编写一个脚本,我需要在其中使用参数。
这是我的 foo.sh:
say_hello()
{
if [ "$1" == "hello" ]
then
echo "hello"
else
echo "<$1>"
fi
}
echo "$1"
say_hello
输出对我来说看起来很奇怪:
hello
<>
你能解释一下为什么在函数中我不能使用参数吗?以及如何在函数中传递脚本参数?
我正在编写一个脚本,我需要在其中使用参数。
这是我的 foo.sh:
say_hello()
{
if [ "$1" == "hello" ]
then
echo "hello"
else
echo "<$1>"
fi
}
echo "$1"
say_hello
输出对我来说看起来很奇怪:
hello
<>
你能解释一下为什么在函数中我不能使用参数吗?以及如何在函数中传递脚本参数?
传递给 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
.
您需要say_hello
使用输入参数调用该函数。
在say_hello
, 中$1
是指传递给该函数的第一个参数。但是,您在没有任何参数的情况下调用它,如下所示:
say_hello
您想要的是$1
(从主脚本上下文)作为参数传递给say_hello
函数,如下所示:
say_hello $1
在脚本中,$1
指的是从命令行运行时传递给脚本的第一个参数。在函数say_hello
中,$1
指的是从脚本调用函数时传递给函数的第一个参数。