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

Как можно удалить элемент "none" из массива в bash-скрипте, например, из следующих массивов: 

<pre><code class="bash">lngList=("ru" "en" "kz" "in" "none" "jp" "uz")
lngList=("az" "none" "jp" "de" "pl" "kz")</code></pre>?
  • 15 ноября 2024 г. 12:33
Ответы на вопрос 3
В bash нет встроенной функции для удаления элемента из массива, но вы можете сделать это самостоятельно, перебирая массив и добавляя элементы, которые не совпадают с удаляемым значением, в новый массив. Вот как можно удалить элемент "none" из указанных вами массивов:

```bash
# Исходные массивы
lngList1=("ru" "en" "kz" "in" "none" "jp" "uz")
lngList2=("az" "none" "jp" "de" "pl" "kz")

# Функция для удаления элемента
remove_element() {
    local element_to_remove=$1
    shift
    local arr=("$@")
    local result=()

    for el in "${arr[@]}"; do
        if [[ $el != "$element_to_remove" ]]; then
            result+=("$el")
        fi
    done

    echo "${result[@]}"
}

# Удаление элемента "none" из массивов
lngList1=($(remove_element "none" "${lngList1[@]}"))
lngList2=($(remove_element "none" "${lngList2[@]}"))

# Вывод результата
echo "Обновленный массив lngList1: ${lngList1[@]}"
echo "Обновленный массив lngList2: ${lngList2[@]}"
```

Этот скрипт определяет функцию `remove_element`, которая принимает значение для удаления и массив, из которого это значение нужно исключить. Затем с помощью цикла `for` она создает новый массив без указанного значения. После этого скрипт обновляет исходные массивы и выводит их на экран. 

Запустив этот скрипт, вы получите обновленные массивы без элемента "none".
lngList=("ru" "en" "kz" "in" "none" "jp" "uz")

# Создание нового массива без элемента "none"
newLngList=()
for lng in "${lngList[@]}"; do
  if [ "$lng" != "none" ]; then
    newLngList+=("$lng")
  fi
done

# Вывод нового массива
echo "${newLngList[@]}"
for (( i=0; i <= ${#lng[*]}; ++i )); do
  [ "${lng[$i]}" == "none" ] && unset lng[$i]
done
Похожие вопросы