【发布时间】:2015-01-06 06:48:47
【问题描述】:
假设我有一个如下所示的数组foo,请注意第三个元素。
foo=("a" "b" "c c")
echo "${foo[2]}" # "c c"
echo "${#foo[@]}" # "3"
如何将该数组的精确副本创建到变量bar 中?
然后如果你想将该数组(按值)传递给函数baz?
编辑:将答案移至答案。
【问题讨论】:
-
您想用
eval完成什么? (为什么你认为你需要eval来完成那件事?) -
baz "${foo[@]}"是按值传递数组的公认和常规方式,这使得您的值可以在函数内部以"$@"的形式访问。您实际上所做的根本不是通过值传递,而是通过名称——也就是说,通过引用传递。 -
...此外,特别是对于 Bash 4.3 或更高版本,有更好、更安全的方法来进行传递引用,而不涉及
eval。 -
@CharlesDuffy 如果我对
baz "${foo[@]}"的理解正确,这意味着没有其他参数可以传递给函数? -
正确,除非您有创意。例如,您可以在数组的 值 之前传递数组 length,然后只从 argv 中弹出那么多项。
标签: arrays bash pass-by-value