Как удалить элементы из одного массива те которых нету в другом?

elements=( js python3 php )

exclude=( js python3 java ruby )

как проверить и удалить элементы из массива exclude если их нет в массиве elements в данном случае java ruby

я пробывал так но ничего не вышло

for element in "${exclude[@]}"; do

elements=(${elements[@]/*${element}*/}) || echo error


done

другими словами ели я пытаюсь удалить элемент которого нету в массиве elements=(${elements[@]/*${element}*/}) как вывести это в консоль ?


Ответы (1 шт):

Автор решения: Ainar-G

Метод «в лоб» с алгоритмической сложностью по операциям порядка O(N+M):

elements=( js python3 php )
exclude=( js python3 java ruby )

for ex in "${exclude[@]}"
do
    remove=1
    for el in "${elements[@]}"
    do
        if [ "$ex" = "$el" ]
        then
            remove=0
        fi
    done

    if [ "$remove" = "1" ]
    then
        exclude=( "${exclude[@]/$ex}" )
    fi
done

Что-то более производительное, наверное, можно сделать с ассоциативными массивами, но старые версии Bash их не поддерживают. Так же, не удивлюсь, если новые версии поддерживают особый синтаксис для этой операции.

→ Ссылка