Bash 二维关联数组Unix脚本。如何迭代?

Bash 二维关联数组Unix脚本。如何迭代?,bash,unix,scripting,Bash,Unix,Scripting,您好,我使用的是bash,在关联二维数组上迭代时遇到了问题 我有以下几点: declare -A x_matrix x_matrix[ele1,sub1]="asdfadf" x_matrix[ele2,sub3]="blabla" x_matrix[ele1,sub2]="no matters" x_matrix[ele3,sub1]="opps" elements=(ele1 ele2 ele3) 我想用这样的已知元素进行迭代 for e in ${elements[@]}; do

您好,我使用的是bash,在关联二维数组上迭代时遇到了问题

我有以下几点:

declare -A x_matrix

x_matrix[ele1,sub1]="asdfadf"
x_matrix[ele2,sub3]="blabla"
x_matrix[ele1,sub2]="no matters"
x_matrix[ele3,sub1]="opps"

elements=(ele1 ele2 ele3)
我想用这样的已知元素进行迭代

for e in ${elements[@]}; do
    for sub in ${!x_matrix[$e,@]}; do
        echo "($e,$sub)> ${x_matrix[$e,$sub]}"
    done
done
我想:

(ele1,sub1)> asdfadf
(ele1,sub2)> no matters
(ele2,sub3)> blabla
(ele3,sub1)> opps
我不知道怎么做,但我相信这是可能的


[编辑]我已对此进行了检查:提供的解决方案不符合我的需要

你需要自己处理。例如(仅适用于示例数据):


你需要自己处理。例如(仅适用于示例数据):


我不希望你接受这个,因为它不能回答你的问题。然而,作为一个例子,这是在python中实现这一点的一种方法。在python中,关联数组称为“字典”,索引数组称为“列表”

给出:

(ele1,sub2)> no matters
(ele1,sub1)> asdfadf
(ele2,sub3)> blabla
(ele3,sub1)> opps

Pythonistas会找到比这更短的方法,但我想展示简单的步骤,并且相对来说是版本中立的(因此没有“f”字符串)。

我不希望您接受这一点,因为它不能回答您的问题。然而,作为一个例子,这是在python中实现这一点的一种方法。在python中,关联数组称为“字典”,索引数组称为“列表”

给出:

(ele1,sub2)> no matters
(ele1,sub1)> asdfadf
(ele2,sub3)> blabla
(ele3,sub1)> opps

Pythonistas会找到比这更短的方法,但我想展示简单的步骤,并且相对来说是版本中立的(因此没有“f”字符串)。

引用手册页:“Bash提供一维索引和关联数组变量。”。您是否有可能将二维数组替换为ele1、ele2和ele3的3个不同数组?是否确实要为此使用bash?还有其他脚本语言/编程语言更适合于这种数据结构。bash是一个shell。Shell具有编程语言功能,但也有局限性—您正在尝试执行Shell设计时不适用的操作。您使用的工具不适合此工作。例如,Python。引用man页面的可能副本:“BASH提供一维索引和关联数组变量。”您是否有可能将二维数组替换为ele1、ele2和ele3的3个不同数组?是否确实要为此使用bash?还有其他脚本语言/编程语言更适合于这种数据结构。bash是一个shell。Shell具有编程语言功能,但也有局限性—您正在尝试执行Shell设计时不适用的操作。您使用的工具不适合此工作。考虑一下,例如Python。我可能已经重复了这一点,而且它工作得很好,但是没有其他方法来避免“IF”语句只在子部件上迭代吗?我恐怕答案是否定的。我已经做到了这一点,它做得很好,但是没有其他的方法来避免“IF”。只在子组件上进行迭代?恐怕答案是否定的。谢谢你,我对python几乎没有经验,但这似乎是我应该走的路。@GuiomarTuñónHita:无论如何,python肯定是一项很好的技能。如果您对代码有任何疑问,请随时提问。谢谢您,我对python几乎没有经验,但这似乎是我应该走的路。@GuiomarTuñónHita:无论如何,python当然是一项很好的技能。如果您对代码有任何疑问,请随时提问。
(ele1,sub2)> no matters
(ele1,sub1)> asdfadf
(ele2,sub3)> blabla
(ele3,sub1)> opps