如何在bash中打印出键值?

时间:2017-03-28 01:48:47

标签: arrays bash dictionary key echo

让我们举例说,我有以下代码:

arr=([j1]=3 [j2]=2 [j3]=1)

如何打印出键值(j1,j2,j3)?

我试过了:

for key in ${!arr[@]}; do
    echo ${key}
done

它打印出以下内容:

0

如何打印出所有键值而不是索引号?

EDIT1:

我尝试了一些建议,现在我的完整代码如下:

#!/bin/bash

#Suggestion 2
declare -A arr

arr=([j1]=3 [j2]=2 [j3]=1)


#My original code
for key in ${!arr[@]}; do
    echo ${key}
done


#Suggestion 1
for i in "${!arr[@]}"
do
    echo "key: $i"
    echo "value: ${arr[$i]}"
done

我有两个for循环,理论上应该打印出我的键值,但我仍然得到以下内容:

0

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

你的语法还可以。你刚忘了一行:

declare -A arr

否则,arr不被视为关联数组,而是一个索引数组,每个索引都被视为一个算术表达式(即数组初始化的计算结果为arr=([0]=3 [0]=2 [0]=1))。

$ arr=([j1]=3 [j2]=2 [j3]=1)
$ for key in "${!arr[@]}"; do echo "${key}"; done
0
$ unset arr

$ declare -A arr
$ arr=([j1]=3 [j2]=2 [j3]=1)
$ for key in "${!arr[@]}"; do echo "${key}"; done
j2
j3
j1

(前导$当然是shell提示符)

答案 1 :(得分:0)

for i in "${!array[@]}"
do
  echo "key  : $i"
  echo "value: ${array[$i]}"
done