Заполните массив в цикле for - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть массив строк для прохождения через скрипт. Сценарий хорошо себя ведет и вернет код ошибки 0, если строка «пропустит», и ненулевой, если «не получится». Если строка проходит, она должна быть включена в окончательный массив для вывода или записи в файл или т. Д. c.

Проблема, с которой я сталкиваюсь, заключается в том, что единственный элемент, попадающий в мой последний массив, - это первая "проходящая" строка.

#!/bin/bash

# validator.sh

if [[ $1 -le 10 ]]; then
    exit 0
else
    exit 1
fi
#!/bin/bash

# main.sh

numbers=(2 4 6 8 10 12 14 16)
keep=()
for n in ${numbers[@]}; do
    if ./validator.sh $n; then
        keep+=("$n")
    fi
done
echo $keep

Запуск main. sh производит:

$ ./main.sh
2

но я ожидаю 2 4 6 8 10

1 Ответ

0 голосов
/ 25 апреля 2020

Если вы не хотите, чтобы keep был массивом соответствующих элементов, измените:

keep+=("$n")

на

keep="$keep $n"

Это будет работать с любой Bourne-совместимой оболочкой и поэтому лучше , если вы ищете решение BASH конкретное c, ниже также будет работать:

keep+="${n} "

Если вы действительно хотите, чтобы это был массив, то для вывода всех элементов вы можно использовать:

echo ${keep[@]}

Как отметили @Jetchisel и @kamilCuk в комментариях. Поскольку вы написали, что хотите вывести все элементы или сохранить их в файл, я предположил, что вам на самом деле здесь не нужен массив, но, возможно, вы планируете использовать эти данные другими способами позже:)

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