簡體   English   中英

如何使用 ksh 中的間接引用來操作 arrays?

[英]How to manipulate arrays using indirect references in ksh?

我想做一個這樣的腳本:

#!/usr/bin/ksh93    
typeset -A foo

function fillItUP {
    typeset -A newarr
    newarr["this"]="bar"
    newarr["another"]="tut"

    inputarrayname=$1

    nameref $inputarrayname=newarr
}

使用 output 的排序:

fillItUP "foo"
echo ${foo["this"]}
bar

我想這很明顯,但我想做的是使用雙重間接引用來操作 function 內部的數組,然后在外面使用它。 沒用:(

任何人都知道實現這一目標的方法嗎?

感謝您的解釋。 我理解你想要實現的目標。

現在這是工作代碼

#!/usr/bin/ksh93
typeset -A foo
foo["this"]="old bar"
foo["another"]="old tut"

function fillItUP {
    nameref newarr=$1
    newarr["this"]="bar"
    newarr["another"]="tut"
    ## nameref newarr=$1


}
fillItUP foo
echo ${foo["this"]}

typeset -n 的 nameref 的整個想法是將變量從一個 scope 提供給另一個。 在您的示例代碼中,您首先將一個本地數組分配給您的 function fillItUP (注意:為什么是本地的??閱讀此內容...排版和 scope )然后嘗試將本地數組指向 foo。 如果你想改變 foo.. 你需要讓局部變量指向 foo 然后改變它。

如果你取消注釋'commented nameref' 並注釋'uncommented nameref' 你會看到foo 的值仍然是“old bar”。 如果您按原樣執行我添加的代碼,您將看到 if foo[this]=bar 的值而不是“舊 bar”

希望這有幫助。

注意:您可以注釋掉 foo 的初始“舊”內容並嘗試一下:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM