Нет. Но $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
).
Вы хотите соединить в пары два списка, которые у вас есть, а не комбинировать их во всех возможных комбинациях.
Один из способов сделать это:
#!/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
в конце цикла сдвигает первый позиционный параметр из этого списка.
Обратите внимание, что использование раскрытия фигурных скобок не требуется только для представления простого списка.
Использование массивов:
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