我很难理解$@
和$*
在传递给函数时的区别。
以下是示例:
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- -- --
发生什么事了?我无法理解差异和出了什么问题。
答案 0 :(得分:2)
$*
和$@
之间没有区别。它们都导致参数列表被全局扩展和单词拆分,因此您不再了解原始参数。你几乎不想要这个。
"$*"
会生成一个字符串,这是使用$IFS
的第一个字符作为分隔符(默认情况下为空格)连接的所有参数。这有时是你想要的。
"$@"
每个参数产生一个字符串,既不是字拆分也不是全局扩展。这通常是你想要的。