@vlarkanov

Как удалять элементы массива, чтобы это работало как в стеке?

Поясню.
Есть массив array=( [1]=first [2]=second [3]=third [4]=forth [5]=fifth )
Хочу удалить первый элемент:
unset array[1]
Если вывести массив, видим, что первый элемент пропал:
second third forth fifth

НО! Если принудительно вывести первый элемент массива - видим, что он, хоть и пустой, присутствует в массиве.

И вот мой вопрос: Можно ли так удалять элементы массива, чтобы оставшийся массив "переиндексировался" вот так:
array[1]=second
array[2]=third
...
array[4]=fifth

?
  • Вопрос задан
  • 266 просмотров
Пригласить эксперта
Ответы на вопрос 2
3vi1_0n3
@3vi1_0n3
1) Элементы массива в bash нумеруются с 0
2) Можно сдвинуть значения всех элементов массива влево. Таким образом, для n элементов n-ный будет заменен (n+1)-ым. Он не существует, соответственно, станет пустым. Вот пример:
#!/bin/bash

array=()
array[0]=first
array[1]=second
array[2]=third
array[3]=forth

echo ${array[@]}

for i in $(seq 0 $((${#array}-1)))
do
    array[$i]=${array[$((i+1))]}
done

echo ${array[@]}

В таком виде элементы массива, в которых есть пробел, пострадать не должны, как в варианте от xibir
Ответ написан
Комментировать
можно так
array=(${array[@]/second})
но first станет нулевым
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы