Bash shellscript数组元素未排序

时间:2019-07-10 06:07:18

标签: bash shell

我有这段代码,当我将主机名存储到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时将其作为数组列表上的第一个元素。

谢谢。

2 个答案:

答案 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

谢谢。