BASH_REMATCH показывает пустую строку после соответствия регулярному выражению

Просто хочу выучить BASH_REMATCH.

В Ubuntu 16.10 я написал небольшой скрипт для BASH_REMATCH:

#!/bin/bash
x='sadas123fnrejkwhfklde'
if [[ $x =~ ([0-9]*) ]] 
then
  echo "match"
  echo ${BASH_REMATCH[1]}
else
  echo "not match"
fi

Тем не менее, когда / я запустил этот скрипт, отображается только "совпадение", а не зафиксированное совпадение!

Версия Bash:

$ bash --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Любые отзывы приветствуются.

1 ответ

([0-9])* соответствует нулю или более вхождений цифр в любом месте строки. Таким образом, это дает пустую строку, которая является допустимым соответствием.

Измените выражение на ([0-9]+) так что это соответствует еще одной цифре.

#!/bin/bash
x='sadas123fnrejkwhfklde'
if [[ $x =~ ([0-9]+) ]]
then
  echo "match"
  echo ${BASH_REMATCH[1]}
else
  echo "not match"
fi

доходность

match
123
Другие вопросы по тегам