Bash:迭代Map的正确方法

Lar*_*ann 4 iteration bash hashtable map

在Bash中,我可以使用这种常见结构创建一个地图(哈希表)

hput() {
  eval "$1""$2"='$3'
}

hget() {
  eval echo '${'"$1$2"'#hash}'
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

hput capitals France Paris
hput capitals Spain Madrid
echo "$(hget capitals France)"
Run Code Online (Sandbox Code Playgroud)

但是,我如何最好地迭代地图中的条目?例如,在Java中我会这样做:

for (Map.Entry<String, String> entry : capitals.entrySet()) {
  System.out.println("Country " + entry.getKey() + " capital " + entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)

是否有一种在Bash中完成类似事情的常用方法?

gho*_*g74 11

如果你有bash 4.0,你可以使用关联数组.否则你可以使用 awks关联数组