2017-04-20 62 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可以指向不同的類型:陣列,關聯數組(地圖)等