Для простой проверки строки необязательно звать 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
