[英]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.