" $ @"之间的区别和" $ *"将参数传递给bash函数时

时间:2015-12-03 03:03:45

标签: bash shell command-line arguments parameter-passing

我很难理解$@$*在传递给函数时的区别。

以下是示例:

function a {
    echo "-$1-" "-$2-" "-$3-";
}

function b {
    a "$@"
}

function c {
    a "$*"
}

如果来电:

$ b "hello world" "bye world" "xxx"

打印:

-hello world- -bye world- -xxx-

如果来电:

$ c "hello world" "bye world" "xxx"

打印:

$ c "hello world" "bye world" "xxx"
-hello world bye world xxx- -- --

发生什么事了?我无法理解差异和出了什么问题。

1 个答案:

答案 0 :(得分:2)

$*$@之间没有区别。它们都导致参数列表被全局扩展和单词拆分,因此您不再了解原始参数。你几乎不想要这个。

"$*"会生成一个字符串,这是使用$IFS的第一个字符作为分隔符(默认情况下为空格)连接的所有参数。这有时是你想要的。

"$@"每个参数产生一个字符串,既不是字拆分也不是全局扩展。这通常是你想要的。