2017-04-20 6 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バリ= \ '評価するの\ $ {$ 1 [@]} \ '**、働いていない –

+0

それは私のために、最終的に** set -A vari $(eval echo \ $ {$ 1 [@]})**に役立ちました。私はサイトから削除します。 しかし、私はなぜ** set -A array1 \ 'eval echo" \ $ {$ 1 [@]} "\' **が機能しないのか理解できませんでした –

答えて

2

ksh93関数では、ローカル変数をという名前のリファレンスtypeset -nまたはnamerefのように定義することができます。

$ 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は異なるタイプを指すことができる:等アレイ、連想配列(マップ)を、私は試みた

関連する問題