Как проверить наличие строки в файле в bash скрипте?
$ grep "\## \[1\.0\.3\]" t.md 
## [1.0.3]
$ grep "\## \[1\.0\.5\]" t.md
Почему нельзя грепунть-то?
У вас ошибка с использованием пайплайнов. При таком перенаправлении, у вас весь цикл 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