Вы сравниваете строку var1
со строкой update1
. Они никогда не будут прежними. Вместо этого вы хотите сравнить переменные:
if [ "$var1" = "$update1" ]
Конечно, все это можно упростить до:
sudo apt update | grep -q "package can be upgraded" && notify-send "Updates are available"
Я мог бы попробовать ввести следующую команду
sed -z 's/\n/,/g;s/,$/\n/' <(comm -3 <(echo "${str1//,/$'\n'}" | sort) <(echo "${str2//,/$'\n'}" | sort))
Проведенные испытания
$ str1='(a),(c),(b),(d)'
$ str2='(a),(b)'
$ sed -z 's/\n/,/g;s/,$/\n/' <(comm -3 <(echo "${str1//,/$'\n'}" | sort) <(echo "${str2//,/$'\n'}" | sort))
(c),(d)
Подстановка параметров оболочки
echo "${str1//,/$'\n'}
заменяет запятые на новые строки.
Так как команда comm
требует сортировки значений
echo "${str1//,/$'\n'}" | sort
Чтобы избежать замены новой строки последней строки
sed -z 's/\n/,/g;s/,$/\n/'
Примечание. -z
изменяет разделитель на нулевые символы (\0
). Это может иметь свои ограничения .