簡體   English   中英

與 ksh93 中的功能和關聯 arrays 混淆

[英]Mess with functions and associative arrays in ksh93

這是我的簡單數組:

typeset -A foo

foo["first"]="first Value"
foo["second"]="second Value"

我想做一個 function 來選擇這個數組,做一些事情並將它返回給腳本。 例如

function changeThat {
    eval tmp=\$$1
    tmp["$2"]=$3
    return $tmp
}

我可以在腳本中使用 go 並執行以下操作:

foo=changeThat foo "first" "a new first value"

並得到一個漂亮的結果

echo ${foo["first"]}
a new first value

現在這不起作用......好吧,我知道語法可能不太正確。 但是我真的迷失了evals和 scape echo的細微差別(並不是說我從靈魂深處討厭它)。 此外,我的參考是bash並且不會是我第一次錯過 ksh 的一些技巧 - 例如,我到目前為止ksh88 ,它甚至沒有關聯的 arrays,而大多數人說它應該。 原來我的 AIX 盒子不同意。 -_-

謝謝!

您可以像這樣定義您的 function:

function changeThat {
  typeset -n ref="$1"
  typeset key="$2"
  typeset value="$3"

  ref["$key"]="$value"
}

typeset -n ref將 ref 變量定義為對其值指定的變量的引用。

當您調用 function 時:

changeThat foo this "mow the lawn"

function 中的變量 ref 更改引用了變量 foo。 現在使用 ref 就像使用 foo 一樣。 調用 changeThat 后

    print ${foo["this"]}

現在將 output “修剪草坪”。

暫無
暫無

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

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