Как добавить элементы внутри цикла в Bash? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть следующий псевдокод:

#!/bin/bash
USERS_LIST=$(cat users.txt)

function exit_loop() {
    declare -a exceeded_users
    if [[ $SUM -gt 7000 ]];then
        echo $SUM
        exceeded_users+=("$USER")
    fi
    #CHECK LAST USER IN THE ARRAY
    if [[ $USER = ${a[exceeded_users{#exceeded_users[@]}-1]} ]];then
        break
    fi
    echo "${exceeded_users[@]}"
}

for USER in $USERS_LIST;do
    SUM=$(( $LAST_DATE_SIZE - $PREVIOUS_DATE_SIZE ))
    exit_loop
done

Моя цель состоит в том, чтобы функция «exit_loop» вышла из цикла, как только она зациклила всех пользователей, которая превысила 700 МБ, но выглядит, когда я повторяюмассив exceeded_users[@] Я не получаю никакого вывода. Мне нужно получить значение массива во втором операторе if.

Если у вас есть другой способ выйти из цикла после запуска цикла один раз для всех пользователей, которые превысили 700 МБ, я подберу это.

1 Ответ

0 голосов
/ 28 октября 2019

Массив exceeded_users объявляется локально в функции exit_loop, поэтому он не будет сохранять значения, хранящиеся между вызовами. Попробуйте либо объявить exceeded_users перед функцией exit_loop, чтобы он стал глобальным, либо объявить его с флагом -g declare -ag exceeded_users, чтобы сделать его глобальным. (Спасибо Чарльзу Даффи за то, что он указал флаг -g)

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