В дополнение к ответу Тобиса я хочу указать, что следует проверить существующие параметры shebang bash в сценарии (например, #! / bin / bash -e) перед вызовом просто bash foo.sh. Вызов скрипта через 'bash foo.sh' не будет заботиться о существующих параметрах bash в shebang.
прочтите регулярное выражение:
$ echo 'sdnfasdnbfas;jdfnba;ldjfnb;asdf[MESG: I NEED THIS: 1] adsfasdfasdfasdfasdf' | grep -Eo '\[.*\]'
[MESG: I NEED THIS: 1]
$
Глядя на ваш собственный ответ на этот вопрос , вот предложение:
for number in 1 2 3; do
string="[MESG: I NEED THIS: $number]"
if grep -qF "$string" /don/key; then
printf 'Matched %d\n' "$number"
else
printf 'Did not match %d\n' "$number"
fi
done
Обратите внимание: если вы хотите сопоставить фиксированную строку (, а не регулярное выражение ), вы должны использовать -F
с grep
. Если вы не используете -F
, вам придется экранировать любые специальные символы в регулярных выражениях (, в данном случае [
и ]
).
-q
останавливает grep
от любого вывода. Нас не интересует вывод, только совпадает он или нет.
Регулярное выражение [MESG: I NEED THIS: 1]
соответствует ровно одному символу из набора символов внутри [...]
, а это не то, что вам нужно.