Для проблемы с циклом для получения вывода

Нет. Но $RANDOM возвращает большие числа (от 0 до 32767 ), что, особенно для слов ограниченной длины, показывает тот же результат, поскольку часть head, вероятно, возвращает все результаты grep (для 3, в моем/usr/share/dict/words)всего 819 совпадений.

Лучшим решением может быть перетасовка результатов:

egrep "^.{$num}$" /usr/share/dict/words | sort -R | tail -n 1

где -Rозначает--random-sort(расширение GNU sort).

-6
04.05.2020, 17:30
2 ответа

Вы хотите соединить в пары два списка, которые у вас есть, а не комбинировать их во всех возможных комбинациях.

Один из способов сделать это:

#!/bin/sh

set -- P02183606 P02183608 sassa

for formid in PID PID2 sas; do
    printf '...urlpath...?applicationRefNo=%s&applicationFormId=%s\n' "$1" "$formid"
    shift
done

Это устанавливает позиционные параметры в список ссылочных номеров, а затем циклически перебирает идентификаторы форм. На каждой итерации URL-адрес печатается с вставленными с помощью printf, а shiftв конце цикла сдвигает первый позиционный параметр из этого списка.

Обратите внимание, что использование раскрытия фигурных скобок не требуется только для представления простого списка.

1
28.04.2021, 23:16

Использование массивов:

a=(P02183606 P02183608 sassa)
b=(PID PID2 sas)

for i in "${!a[@]}"; do
    printf 'http://...?applicationRefNo=%s&applicationFormId=%s\n' "${a[$i]}" "${b[$i]}"
done

Альтернативный, простойprintf:

arr=(P02183606 PID P02183608 PID2 sassa sas)

printf 'http://...?applicationRefNo=%s&applicationFormId=%s\n' "${arr[@]}"

или даже без массива:

printf 'http://...?applicationRefNo=%s&applicationFormId=%s\n' P02183606 PID P02183608 PID2 sassa sas
1
28.04.2021, 23:16

Теги

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