2017-04-20 38 views
0

由于我们在KSH中有动态范围,所以我们可以从被调用的函数中访问变量值。但是我没有存储这些值。请帮助做到这一点。如何存储传递给函数KSH的数组?

#!/bin/ksh 
fun1(){ 
eval echo "\${$1[@]}" 
} 
fun2(){ 
set -A var1 val1 val2 val3 val4 
fun1 var1 
} 
fun2 

我想存储的EVAL回声 “\ $ {1 $ [@]}”在一个新的数组的值。我试过如下。

fun1(){ 
set -A array1 `eval echo "\${$1[@]}"` 
echo " ${array[@]} " 
} 

但是不行。如何存储这些值。

+0

我试图**设置-A VARI = \'的eval \ $ {$ 1 [@]} \ '**,没有工作 –

+0

它终于为我工作** set -A vari $(eval echo \ $ {$ 1 [@]})**,评论我是否没有用的问题。我将从网站中删除。 但我不明白为什么** set -A array1 \'eval echo“\ $ {$ 1 [@]}”**'不工作 –

回答

2

在ksh93函数中,您可以将局部变量定义为namereferencetypeset -nnameref

$ function f1 { nameref a=$1; echo ${a[1]}; } 
$ set -A arry fee fie foe fum 
$ f1 arry 
fie 
$ set -A barry foo bar 
$ f1 barry 
bar 

甲namereference可以指向不同的类型:阵列,关联数组(地图)等