@nikweter
Системный администратор

Как сравнить два массива в bash?

Есть 2 массива вида
arr1 =
asd_qwe1
qwe_asd
zxc_Axd

arr2=
asd_qwe1
qwe_asd
zxc_Axd

В теории они абсолютно идентичны. Но как в этом убедиться? А если это не так - вывести предупреждение (отправить на почту).
  • Вопрос задан
  • 3207 просмотров
Решения вопроса 1
AlexMcArrow
@AlexMcArrow
Люблю РНР, да я такой!
echo ${arr1[@]} ${arr2[@]} | tr ' ' '\n' | sort | uniq -u

Выведет строку из первого и второго массива тех элементов что отличаются
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xotkot
@xotkot
хорошо есть и хорошо весьма
здесь описаны разные способы

от себя добавлю:
Запишем эталонный массив в файл:
$ echo $arr1 > arr1
Сравниваем:
$ echo $arr2 | diff -q -s arr1 -

Если массивы одинаковые, выведет(ключ -s):
Файлы arr1 и - идентичны
Если массивы различаются, выведет(ключ -q):
Файлы arr1 и - различаются

p.s.
Если сравнений много и/или эталонный массив довольно большой то чтобы не мучать диск можно записывать прямо в ОЗУ, обычно для этого служит tmpfs (куда монтируется смотри командой df)
Ответ написан
Комментировать
3vi1_0n3
@3vi1_0n3
Еще вариант:
arr1=(1 2 3 4 5)
arr2=(1 2 3 4 5)
if [ "${arr1[*]}" == "${arr2[*]}" ]; then echo 1; else echo 2; fi
arr1=(1 2 3 4 6)
if [ "${arr1[*]}" == "${arr2[*]}" ]; then echo 1; else echo 2; fi

В первом случае будет 1, во втором 2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы