Я никогда раньше не использовал select
, а также никогда раньше не использовал массивы bash, поэтому вот версия 0.1 из меню, которое перебирает 25 пунктов за раз. Количество элементов одновременно установлено как howmany . Вам нужно добавить логику для возврата к началу. Он также не делает ничего интересного с выбором в меню. Вы можете захотеть прервать
, когда пользователь выбирает фактический пункт меню.
Интересные части - это пополнение массива CURRNUMS на основе начального и конечного индексов и включение дополнительного «следующего» элемента в цикл select
.
ALLNUMBERS=({30..90})
start=0
howmany=25
while :
do
end=$((start + howmany - 1))
CURRNUMS=
for (( i = start; i < end ; i++ ))
do
cindex=$((i - start))
CURRNUMS[$cindex]=${ALLNUMBERS[$i]}
done
echo Presenting a new set of menu items...
select number in ${CURRNUMS[*]} next; do
echo You picked $REPLY
echo number is now: $number
if [ $REPLY = "next" ] || [ $REPLY = $howmany ] ; then
start=$end
break;
fi
done
done
Вот пример вывода:
Presenting a new set of menu items...
1) 30 5) 34 9) 38 13) 42 17) 46 21) 50 25) next
2) 31 6) 35 10) 39 14) 43 18) 47 22) 51
3) 32 7) 36 11) 40 15) 44 19) 48 23) 52
4) 33 8) 37 12) 41 16) 45 20) 49 24) 53
#? 2
You picked 2
number is now: 31
#? 25
You picked 25
number is now: next
Presenting a new set of menu items...
1) 54 5) 58 9) 62 13) 66 17) 70 21) 74 25) next
2) 55 6) 59 10) 63 14) 67 18) 71 22) 75
3) 56 7) 60 11) 64 15) 68 19) 72 23) 76
4) 57 8) 61 12) 65 16) 69 20) 73 24) 77
#? 3
You picked 3
number is now: 56
#? next
You picked next
number is now:
Presenting a new set of menu items...
1) 78 3) 80 5) 82 7) 84 9) 86 11) 88 13) 90
2) 79 4) 81 6) 83 8) 85 10) 87 12) 89 14) next
#? ^C
Утилита join
по умолчанию выполняет так называемое «внутреннее соединение» в SQL, в результате чего объединяются записи тех записей, поле соединения которых идентично в обоих файлах. Да, это "equi -соединение", так как оно использует равенство для проверки между полями.
Утилита join
может выполнять внутренние соединения (по умолчанию ), а также левые, правые и внешние соединения (с использованием -a1
, -a2
и -a1 -a2
соответственно ). Все эти соединения являются "равными -соединениями" с join
, поскольку для сравнения используется равенство.
Поле соединения по умолчанию является первым разделенным пробелом -полем в каждом файле, но это можно изменить с помощью параметров командной строки -1
и -2
(для выбора поля соединения в первом и второй файл, соответственно ), а разделитель можно изменить на другой одиночный символ, используя -t
.
Поведение join
по умолчанию аналогично
SELECT * FROM table1 JOIN table2 ON (table1.firstfield = table2.firstfield);
за исключением того, что вы получите только одну копию поля соединения(firstfield
здесь ).