Это не проблема сравнения строк, это логическая проблема.
Я написал вам MCVE , который демонстрирует ту же проблему с меньшим количеством кода и меньшим количеством зависимостей:
flag=0
target="hello"
for candidate in "hello" "world"
do
if [ "$target" != "$candidate" ]
then
flag=1
fi
done
if [ "$flag" -eq 1 ]
then
echo "The string was not found"
fi
Это печатает The string was not found
каждый раз, так же, как ваш сценарий, даже если он явно там.
Проблема здесь в том, что сценарий требует, чтобы ВСЕ файлы совпадали. Это должно только требовать, чтобы ЛЮБОЙ файл соответствовал. Самый простой способ исправить это:
- Установить
flag=1
при обнаружении совпадения (не несоответствие)
- Сделать
flag=1
означать, что совпадение найдено (а не найдено)
Вот версия, которая правильно находит строку:
flag=0
target="hello"
for candidate in "hello" "world"
do
if [ "$target" = "$candidate" ]
then
flag=1
fi
done
if [ "$flag" -eq 1 ]
then
echo "The string was found"
else
echo "The string was not found"
fi