在bash中的一行中循环遍历地图键

问题描述 投票:0回答:2

在 python 中,我可以用一行完成此操作:

>>> for key, value in dict(j=1, k=2).items():
...     print(key, value)
...
j 1
k 2
>>>

在 bash 中,我可以这样做:

$ map=([j]=1 [k]=2); for key in ${!map[@]}; do value=${map[$key]}; echo $key $value; done
j 1
k 2
$

bash 中有没有一种方法可以将

map
声明“内联”到
for
中 - 类似在 python 示例中如何实现 - 而不是预先声明它?

我寻找这个的原因是为了避免必须分别声明两个额外的变量

map
value
- 换句话说,在命令行上执行单行代码时,如果可能的话,使其更短。

bash
2个回答
0
投票

bash 中是否有一种方法可以将映射声明“内联”到 for 中 - 类似在 python 示例中如何实现 - 而不是预先声明它?

没有。

你可以逐行阅读两个单词,但没有地图。

printf "%s\n" j 1 k 2 | while read -r key value; do echo "$key" "$value"; done

使用 shellcheck 检查您的脚本。


0
投票

没有办法做

declare -A map=([j]=1 [k]=2)

"${!map[@]}"
参数扩展需要声明参数。

© www.soinside.com 2019 - 2024. All rights reserved.