我正在尝试将数组传递给函数,并且对数组所做的任何更改都会反射(reflect)在函数之外
function update_array()
{
${1[0]}="abc" # trying to change zero-index array to "abc" ,
# bad substitution error
}
foo=(foo bar)
update_array foo[@]
for i in ${foo[@]}
do
echo "$i" # currently changes are not reflected outside the function
done
我的问题是
1)我如何访问索引数组,例如:零索引数组,在函数中,它的语法是什么
2)如何更改此索引数组,以便更改也反射(reflect)在函数外部
最佳答案
您可以通过在 var 前面加上 !
来遍历键。 :
for key in ${!foo[@]}
do
echo "$key: ${foo[$key]}"
done
至于更新数组,您不能将其传递给函数,但该函数可以访问脚本的全局状态,这意味着您可以这样做:
#!/bin/bash
function update_array() {
foo[0]="bar"
}
foo=(foo bar)
for key in ${!foo[@]}
do
echo "$key: ${foo[$key]}"
done
# 0: foo
# 1: bar
update_array
for key in ${!foo[@]}
do
echo "$key: ${foo[$key]}"
done
# 0: bar
# 1: bar
关于arrays - 如何将数组传递给函数并且对数组的更新反射(reflect)在函数之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21026992/