@ermolaev_nikita

Как проверить наличие строки в файле в bash скрипте?

Хочу в файле md проверять наличие версии, однако никак не могу совладать с синтаксисом Bash'a

т.к. я ищу вхождение "## [1.0.3]" то Грепнуть не совсем получается, пытаюсь тупо проходить построчно файл, но Bash отказывается сохранять значение новое значение в переменную.

#!/bin/bash
isString=false
cat CHANGELOG.md | while read line
do
 if [[ $line == *"## [1.0.3]"* ]]; then
    isString=true
    break
 fi
done
echo $isString
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
$ grep "\## \[1\.0\.3\]" t.md 
## [1.0.3]
$ grep "\## \[1\.0\.5\]" t.md

Почему нельзя грепунть-то?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
У вас ошибка с использованием пайплайнов. При таком перенаправлении, у вас весь цикл while запускается в дочернем процессе, и естественно когда он завершается, переменная isString, которая была задана в дочернем процессе, в родительский не будет передана.
Можно сделать вот так:

#!/bin/bash
isString=false
while read line
do
 if [[ $line == *"## [1.0.3]"* ]]; then
    isString=true
    break
 fi
done<CHANGELOG.md
echo $isString

Ну и можно просто сократить
grep '## \[1\.0\.3\]' CHANGELOG.md
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы