【发布时间】:2014-10-30 05:55:44
【问题描述】:
我需要在函数内部填充一个数组,将其作为参数传递,而不是使用全局变量(该函数将在这里和那里使用不同的数组调用)。
我已阅读此讨论 bash how to pass array as an argument to a function 并使用 pass-by-name 解决方案,几乎可以解决问题。
这是我的代码
#!/bin/bash
function fillArray {
arrayName=$1[@]
array=("${!arrayName}")
for i in 0 1 2 3
do
array+=("new item $i")
done
echo "Tot items in function: ${#array[@]}"
for item in "${array[@]}"
do
echo $item
done
echo
}
myArray=("my item 0" "my item 1")
fillArray myArray
echo "Tot items in main: ${#myArray[@]}"
for item in "${myArray[@]}"
do
echo $item
done
这是输出
Tot items in function: 6
my item 0
my item 1
new item 0
new item 1
new item 2
new item 3
Tot items in main: 2
my item 0
my item 1
因此,函数正确地使用了作为参数传递的数组(前两项是在主声明中添加的一项),并将新项附加到数组中。函数调用后,在 main 中,添加的项丢失了。
我错过了什么?可能是一些传递引用/传递复制的东西......
谢谢!
【问题讨论】:
标签: arrays bash function pass-by-reference