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