![](/img/trans.png)
[英]How to assign values to an associative array in another array in React.js
[英]How to assign an associative array to another variable in zsh?
在zsh中,有沒有辦法將關聯數組分配給另一個變量? 我想這樣的事情:
typeset -A orig
orig=(key1 val1 key2 val2)
typeset -A other
other=$orig
print '$orig: '$orig
print '$other: '$other
print '$orig[key1]: '$orig[key1]
print '$other[key1]: '$other[key1]
這將打印:
$orig: val1 val2
$other: val1 val2
$orig[key1]: val1
$other[key1]:
我希望能夠使用$other[key1]
並獲得val1
。
我知道我可以迭代按鍵並逐項復制,但我真的想避免這種情況。 另外, eval
是邪惡的:)
我已經嘗試了other=($orig)
和其他變體,但這將從orig
獲取我的值並創建為這樣的關聯數組
other=(val1 val2)
所以other[key1]
什么都不返回, other[val1]
返回val2
,這不是我想要的。
如果我理解正確的話,我的每次嘗試中發生的事情都是$other
獲得$orig
值的數組,沒有鍵。 如何讓它接收鍵和值並在它們之間保持正確的關聯?
我不擔心空值,如果這甚至是一個問題,因為我相信$orig
將表現得很好。
謝謝!
你必須深入研究參數擴展標志的精彩世界:) k
和v
標志可以一起使用來強制關聯數組擴展到它的鍵和值。
$ typeset -A orig
$ orig=(key1 val1 key2 val2)
$ print ${(kv)orig}
key1 val1 key2 val2
然后,您可以使用set
命令使用該擴展生成的交替鍵/值填充副本。
$ typeset -A other
$ set -A other ${(kv)orig}
$ print $other[key1]
val1
這些和其他標志記錄在man zshexpn
“參數擴展標志”下,這是我最喜歡的zsh
功能之一。
zsh: bad set of key/value pairs for associative array
沒有逃脫的完美世界:
typeset -A old new
old=(k1 v1 k2 v2 k3 v3)
typeset old # old=( k1 v1 k2 v2 k3 v3 )
...不存在,您的數組通常包含空值:
old[k2]=
typeset old # old=( k1 v1 k2 '' k3 v3 )
...因此你需要使用"
(引用), @
(轉義)和f
(場分離):
typeset new # new=( )
new=("${(@fkv)old}")
typeset new # new=( k1 v1 k2 '' k3 v3 )
有關參數擴展標志的更多信息,請參見man zshexpn
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.