BASH:需要一些有关多维关联数组的帮助
发布时间:2020-12-15 18:41:28 所属栏目:安全 来源:网络整理
导读:我正在尝试创建一个多维关联数组,但需要一些帮助.我已经回顾了 the page suggested in this SO answer,但更让我感到困惑.到目前为止这里是我所拥有的: 剧本: #!/bin/bashdeclare -A PERSONSdeclare -A PERSONPERSON["FNAME"]='John'PERSON["LNAME"]='Andre
我正在尝试创建一个多维关联数组,但需要一些帮助.我已经回顾了
the page suggested in this SO answer,但更让我感到困惑.到目前为止这里是我所拥有的:
剧本: #!/bin/bash declare -A PERSONS declare -A PERSON PERSON["FNAME"]='John' PERSON["LNAME"]='Andrew' PERSONS["1"]=${PERSON[@]} PERSON["FNAME"]='Elen' PERSON["LNAME"]='Murray' PERSONS["2"]=${PERSON[@]} for KEY in "${!PERSONS[@]}"; do TMP="${PERSONS["$KEY"]}" echo "$KEY - $TMP" echo "${TMP["FNAME"]}" echo "${TMP["LNAME"]}" done 输出: 1 - John Andrew John Andrew John Andrew 2 - Elen Murray Elen Murray Elen Murray 正如你所看到的,试图访问for循环中的$TMP数组的特定索引返回整个数组. [Q]为了单独访问for循环中$TMP数组的“FNAME”和“LNAME”索引,我需要做些什么? 谢谢.
你不能做你想做的事情:
bash arrays是一维的
$declare -A PERSONS $declare -A PERSON $PERSON["FNAME"]='John' $PERSON["LNAME"]='Andrew' $declare -p PERSON declare -A PERSON='([FNAME]="John" [LNAME]="Andrew" )' $PERSONS[1]=([FNAME]="John" [LNAME]="Andrew" ) bash: PERSONS[1]: cannot assign list to array member 您可以通过组合一个合适的数组索引字符串来伪造多维度: declare -A PERSONS declare -A PERSON PERSON["FNAME"]='John' PERSON["LNAME"]='Andrew' i=1 for key in "${!PERSON[@]}"; do PERSONS[$i,$key]=${PERSON[$key]} done PERSON["FNAME"]='Elen' PERSON["LNAME"]='Murray' ((i++)) for key in "${!PERSON[@]}"; do PERSONS[$i,$key]=${PERSON[$key]} done declare -p PERSONS # ==> declare -A PERSONS='([1,LNAME]="Andrew" [2,FNAME]="Elen" [1,FNAME]="John" [2,LNAME]="Murray" )' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |