我正在尝试创建一个多维关联数组,但需要一些帮助.我已经回顾了
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" )'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。