Для простой проверки строки необязательно звать grep отдельным процессом — bash умеет regex сам, через =~ внутри [[ ]].

line="user=admin;role=superadmin"
[[ $line =~ role=([a-z]+) ]] && echo "role: ${BASH_REMATCH[1]}"

BASH_REMATCH[0] — всё совпадение целиком, [1], [2]… — группы в скобках по порядку открывающих (. Массив живёт до следующего =~.

Синтаксис — extended regex (ERE), как grep -E, а не basic как обычный grep: группы без экранирования, +/?/{} работают напрямую. Для разовой проверки это быстрее fork/exec внешнего процесса, но для построчной обработки файла grep -P/awk всё равно удобнее.

#bash #regex #sysadmin