Вы можете сопоставить подстроку с имеющимся у вас регулярным выражением и получить доступ к Группе 1, используя ${BASH_REMATCH[1]}
:
k="abc=value1"
rx='abc=(.*)'
if [[ $k =~ $rx ]]; then
echo ${BASH_REMATCH[1]};
fi
# => value1
См. онлайн демо
Обратите внимание, что это самый простой способ использовать регулярное выражение, объявив его в отдельной переменной, чтобы код работал, как и ожидалось, во всех версиях Bash, поддерживающих оператор соответствия =~
. Начиная с Bash 3.2 , [[ $k =~ "abc=(.*)" ]]
подобный код будет вызывать сравнение литеральных строк, а не сравнение регулярных выражений:
ф. Кавычка строкового аргумента в оператор =~
команды [[
теперь вызывает
сопоставление строк, как и с другими операторами сопоставления с образцом.
Регулярное выражение имеет смысл, если у вас сложный сценарий. В вашем случае манипуляции со строками подобно , предложенному pynexj , также будут работать:
k="abc=value1"
echo ${k#*=}
# => value1
См. еще одно демо онлайн . Здесь #
вызывает удаление подстроки самой короткой подстроки между началом строки и первым символом =
(включая его). Смотрите документацию:
Удаление подстроки
${string#substring}
Удаляет самое короткое совпадение $ substring с начала строки $.