gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:11:40 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to iterate over arguments in a Bash script

(9 个回答)


6年前关闭。




我很难理解 $@ 之间的区别和 $*将它们传递给函数时。

这是示例:

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- -- --

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

最佳答案

$*之间没有区别和 $@ .它们都会导致参数列表被全局扩展和分词,因此您不再了解原始参数。你几乎不想要这个。
"$*"结果是一个字符串,它是使用 $IFS 的第一个字符连接的所有参数。作为分隔符(默认为空格)。这有时是您想要的。
"$@"每个参数产生一个字符串,既不是分词也不是 glob-expanded。这通常是您想要的。

关于bash - 将参数传递给 bash 函数时 "$@"和 "$*"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34057123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com