Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 参数在函数中不可见_Bash_Function_Parameters_Positional Parameter - Fatal编程技术网

Bash 参数在函数中不可见

Bash 参数在函数中不可见,bash,function,parameters,positional-parameter,Bash,Function,Parameters,Positional Parameter,我正在写一个脚本,在这里我需要使用参数 这是我的foo.sh: say_hello() { if [ "$1" == "hello" ] then echo "hello" else echo "<$1>" fi } echo "$1" say_hello say_hello() { 如果[“$1”==“你好”] 然后 回音“你好” 其他的 回声“” fi } 回音“$1” 打招呼 输出对我来说非常奇怪: hello <> 你好

我正在写一个脚本,在这里我需要使用参数

这是我的foo.sh:

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

echo "$1"
say_hello
say_hello()
{
如果[“$1”==“你好”]
然后
回音“你好”
其他的
回声“”
fi
}
回音“$1”
打招呼
输出对我来说非常奇怪:

hello
<>
你好
你能解释一下为什么在函数中我不能使用params吗?如何在函数中传递脚本参数

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

例如,如果
print\u script\u args
如下所示:

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1
然后,
/print\u script\u args hello world
将打印以下内容:

hello
world
bye
world
如果
print\u function\u args
如下所示:

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1
然后,
/print\u function\u args hello planet
将打印以下内容:

hello
world
bye
world

-脚本的参数不起任何作用,因为打印的是传递给shell函数的参数,即传递给shell中函数的参数与传递给shell本身的参数不同

例如,如果
print\u script\u args
如下所示:

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1
然后,
/print\u script\u args hello world
将打印以下内容:

hello
world
bye
world
如果
print\u function\u args
如下所示:

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1
然后,
/print\u function\u args hello planet
将打印以下内容:

hello
world
bye
world

-脚本的参数不起任何作用,因为打印的是传递给shell函数的参数,即
bye world
您需要使用输入参数调用
say_hello
函数

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

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1
您需要将
$1
(从主脚本上下文)作为参数传递给
say_hello
函数,如下所示:

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1

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

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

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

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1
您需要将
$1
(从主脚本上下文)作为参数传递给
say_hello
函数,如下所示:

echo $1
echo $2
foo() {
    echo $1
    echo $2
}

foo bye world
say_hello
say_hello $1

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

函数的参数与shell的参数不同。@SeanBright您完全正确。谢谢添加此注释作为答案,我将选择它。或
说_hello“$@”
传递所有参数参数参数到函数的参数与到shell的参数不同。@SeanBright您完全正确。谢谢添加此注释作为答案,我将选择它。或
say_hello“$@”
传递所有参数