让我们举例说,我有以下代码:
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
我的代码出了什么问题?
答案 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