Почему мой метод обрабатывает элемент, который был удален из массива? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть массив строк, представляющих даты:

filedates=()

Мне нужно найти самую старую дату в массиве, сравнивая текущий элемент с временной самой старой датой ($ tempOldestDate)

После нахождения самой старой даты в массиве я проверяю, есть ли в массиве три элемента с такой же датой. Если нет 3 элементов, соответствующих дате, я удаляю эти элементы. Логи c У меня по этой части отлично работает. Я печатаю исходный массив, а затем результирующий массив, и он ясно показывает, что эти элементы были удалены:

Часть, с которой я борюсь, это когда я пытаюсь вызвать мой find_oldest_date Метод снова из метода remove_oldest_date с массивом result . Вызов $ set_temp_oldest_date с массивом $ result работает, как и ожидалось. Но выполнение вызова сразу после $ find_oldest_date продолжает возвращать удаленный элемент ... Я не могу понять, почему он продолжает включать удаленный элемент ...

В выходных данных временная дата отображается как та, которую я удалил ... Не уверен, как это возможно, поскольку result=() ясно показывает, что этот элемент был удален. РЕДАКТИРОВАТЬ : Скрипт для проверки функциональности: PS Хотя я действительно ценю шансы оптимизировать скрипт, пожалуйста, постарайтесь сделать все возможное, чтобы задать вопросы, которые я задаю, а затем оставить отзыв для оптимизации. Спасибо

#!/bin/bash
filedates=(20200420,20200420,20200420,20200419,20200419,20200419,20200416,20200416)

find_oldest_date (){
    arr="$1"
    echo "Searching for oldest date in directory..."
    for file in $arr; do
        currentDate=$file
        if [ $currentDate -lt $tempOldestDate ]; then
            oldestDateFound=$currentDate
        else
            oldestDateFound=$tempOldestDate
        fi
    done
    oldestDateFoundFormatted=`date -d $oldestDateFound +%Y-%m-%d`
    echo "Oldest date found in directory: "$oldestDateFoundFormatted
    printf "\n"
}

set_temp_oldest_date (){
    arr=$1
    echo "Setting temporary oldest date..."
    currentOldestDate=($arr[1])
    currentOldestDateFormatted=`date -d $currentOldestDate +%Y-%m-%d`
    echo "Temporary oldest date: "$currentOldestDateFormatted
    printf "\n"
}
find_three_files_with_oldest_date(){
    arr=$1
    i=0
    echo Searching for all three files with date: $oldestDateFoundFormatted ...
    for date in $arr; do
    currentDate=$date
    if [ $currentDate == $oldestDateFound ]; then
    ((i=i+1))
    fi
    done

    printf "\n"
    echo "*****************"
    echo "$i file(s) found"
    echo "*****************"
    printf "\n"
    filesMissing=$((3-$i))

    if [ $i == 3 ]; then
        echo "*****************"
        echo  All 3 files found
        echo "*****************"
    else
        echo "*****************"
        echo "$filesMissing file(s) missing"
        echo "*****************"
        printf "\n"
        echo $(remove_oldest)
        printf "\n"
        echo $(find_oldest_date)           
        echo $(find_three_files_with_oldest_date)
    fi
}
remove_oldest(){
        arr=$1
        echo "Removing files with date $oldestDateFound ..."
        delete="$oldestDateFound"
        result=("${arr[@]}")
        echo before: ${arr[@]}
        printf "\n"
        echo to delete: ${delete[@]}
        printf "\n"
        for i in $result; do
        for host in ${delete[@]}; do
        result=( "${result[@]/$host}" )
        done
        done
        echo after: ${result[@]}
        printf "\n"
        echo Starting new search with updated/filtered list of dates
        echo $(set_temp_oldest_date "${result[@]}")
        echo $(find_oldest_date "${result[@]}")
        echo $(find_three_files_with_oldest_date "${result[@]}")

}

set_temp_oldest_date "${filedates[@]}"
find_oldest_date "${filedates[@]}"
find_three_files_with_oldest_date "${filedates[@]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...