Как проверить строку в строке с помощью оператора if?

Я ожидаю, что результат будет ниже

$ ./test.sh Manifest.txt test/directory1/dir2/Main test/directory1/dir2/Main contains Main test/directory1/dir2/Main have string Main directory2/dir3 directory2/dir3 dont have string Main 

Я использую скрипт, как показано ниже.

 #!/usr/bin/ksh while IFS='' read -r line || [[ -n "$line" ]]; do for project in $line do echo $project if [[ "$project" =~ ^(Main)$ ]]; then echo "$project contain Main" exit 1 else echo "$project dont have Main" fi done done < "$1" 

Но это не возвращает ожидаемый результат.

Что дает результат как

 test/directory1/dir2/Main test/directory1/dir2/Main dont have Main dir2/dir3 dir2/dir3 dont have Main 

One Solution collect form web for “Как проверить строку в строке с помощью оператора if?”

Регулярное выражение ^(Main)$ будет сопоставлено с полной строкой в $project . Кажется, это путь. Проблема в том, что если $project является именно Main , сравнение не удастся. Это связано с тем, что выражение привязано как к началу, так и к концу строки.

Я считаю, что простое изменение выражения на Main$ будет разобраться в нем. Это будет соответствовать Main в конце строки в $project .

  • Назначение по умолчанию для нулевой переменной с заменой команды
  • Как я могу отредактировать редактируемый результат?
  • Число новых строк в строке как целое
  • извлекать часть текста из всех совпадающих строк
  • Автоматическая замена строк в gedit
  • Добавить разделитель тысяч в число
  • Невозможно сравнить результат lsb_release с строкой в ​​Bash
  • Проверьте, содержит ли переменная оболочки абсолютный путь
  • Сценарий оболочки для назначения значений из таблицы поиска слишком медленный
  • Как использовать sed для печати части строки, содержащей хеши (или любое альтернативное решение)?
  • Как совместить точную строку с помощью `sed`? Но не его часть.
  • Linux и Unix - лучшая ОС в мире.