Использование ассоциативного массива в качестве помощника для отслеживания элементов в одном списке (в качестве ключей ), а затем быстрая проверка элементов другого списка по этим:
#!/bin/bash
list1=( 1 3 5 6 7 8 bumble bee )
list2=( 2 4 4 4 6 7 8 bee beer )
declare -A seen
for item in "${list1[@]}"; do
seen[$item]=1
done
for item in "${list2[@]}"; do
if [ -n "${seen[$item]}" ]; then
intersection+=( "$item" )
fi
done
echo 'Intersection:'
printf '\t%s\n' "${intersection[@]}"
При этом используются точные совпадения строк для сравнения элементов между двумя списками.
Результат:
Intersection:
6
7
8
bee
Я наполовину -отвечу на свой вопрос :Я не смог найти четкой документации о повторном использовании номеров устройств, но я нашел способ присвоить устройству более уникальный номер.
Хитрость заключается в использовании инструкции udev
's IMPORT
для генерации случайного числа, например, это правило:
KERNEL=="ttyUSB*", IMPORT{program}="/bin/bash -c 'echo FOORAND=$RANDOM'", SYMLINK+="my-device-%n-%E{FOORAND}"
Создает символические ссылки на устройства ttyUSB, такие как /dev/my-device-0-3853
. При добавлении нового устройства оно получает новый случайный номер.
Номер ядра(%n
)включен, а также случайное число, чтобы гарантировать, что символические ссылки, существующие в любой момент времени, всегда уникальны.