2014-01-09 45 views
0

我想一个数组传递到一个函数和数组做任何的改变体现在功能如何通过数组功能和更新阵列反射的外部功能

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)我如何更改此指数数组的语法,这样的变化是outsite反映该功能也是

回答

1

您可以用!前缀的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 
+0

谢谢你是我寻找的答案!真的很欣赏它嘿嘿 – Computernerd

0

你函数应该这样定义:

function update_array() { 
    arr=("${!1}") 
    arr[0]="abc" 
} 

然后将其命名为:

update_array "foo[@]"