我有这段代码,当我将主机名存储到CustomHostName数组时,我希望它应该按顺序存储,当我尝试打印或使用该数组时似乎没有正确存储
declare -A CustHostName
for i in "${UdmPodsList[@]}" ; do
hostname=`kubectl get pods -n $NameSpace -o wide|grep $i |awk '{print $7}'`
CustHostName["$i"]="$hostname"
echo "$hostname"
done
echo "${CustHostName[@]}"
echo $ hostname,将按此顺序打印
vudmvzcl00-worker-02
vudmvzcl00-worker-03
回显“ $ {CustHostName [@]}”,或者在for循环中使用它,它以worker-03作为第一个元素
vudmvzcl00-worker-03 vudmvzcl00-worker-02
我正在尝试对数组进行排序,但这不是我想要的。
我希望在使用vudmvzcl00-worker-02时将其作为数组列表上的第一个元素。
谢谢。
答案 0 :(得分:0)
替换
echo "${CustHostName[@]}"
使用
for key in $(sort <<<"${!CustHostName[@]}"); do
echo "${CustHostName[$key]}"
done
说明
${!CustHostName[@]}"
->获取密钥,而不是值
答案 1 :(得分:0)
我尝试过这种方式,看来对我有用。
CustomHostName=()
n=0
for i in "${UdmPodsList[@]}" ; do
((n++))
hostname=`kubectl get pods -n $NameSpace -o wide|grep $i |awk '{print $7}'`
CustHostName[$n]="$hostname"
echo "$hostname"
done
输出符合我的预期。无需排序。
echo "${CustHostName[@]}"
vudmvzcl00-worker-02 vudmvzcl00-worker-03
或在数组中打印。
for HOST in "${!CustHostName[@]}" ; do
echo "${CustHostName[$HOST]}"
done
output(ArrayPrint):
vudmvzcl00-worker-02
vudmvzcl00-worker-03
谢谢。