Элементы массива оболочки Bash не упорядочены - PullRequest
1 голос
/ 10 июля 2019

У меня был этот код, когда я сохранял имя хоста в массиве 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

echo "$ {CustHostName [@]}" или использовал его в цикле for, в качестве первого элемента у него worker-03

 vudmvzcl00-worker-03 vudmvzcl00-worker-02

Я пытаюсь отсортировать массив, но это не то, что я хотел сделать.

Я хочу, чтобы vudmvzcl00-worker-02 был первым элементом в списке массивов, когда я использовал.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я пытался таким образом, кажется, работает для меня.

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

вывод (ArrayPrint):

vudmvzcl00-worker-02
vudmvzcl00-worker-03

Спасибо.

0 голосов
/ 10 июля 2019

замена * * 1001

echo "${CustHostName[@]}"

с

for key in $(sort <<<"${!CustHostName[@]}"); do
   echo "${CustHostName[$key]}"
done

Объяснение

${!CustHostName[@]}" -> получить ключи, а не значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...