2015-08-04 3 views
0

Я ищу регулярное выражение для -h и --help подумал, что нижеследующее должно соответствовать ему, не ведет себя так, как я ожидаю, что я делаю неправильно?Invalid regex check in BASH match

if [[ "$1" =~ ^((-{1,2})([Hh]$|[Hh][Ee][Ll][Pp])|)$ ]] ; then 
    echo 'help flagged' ; exit 0 
fi 

пожалуйста, имейте в виду, что getop используется дальше вниз в коде ...

Ожидаемые результаты, если либо -h или --help (любой случай) поражаются мы эхо и выход

+4

'shopt -s nocasematch; [[$ 1 = @ (- h | --help)]] 'выглядит намного проще. Ваш код будет соответствовать символам -help и '-h' (что может быть намеренно). – chepner

+1

Похоже, что он будет соответствовать '-' и' --', из-за последнего символа канала. – chepner

+0

'@ (.. | ..)' нуждается в extglob, если он еще не включен. –

ответ

2

Если все, что вы хотите, чтобы соответствовать либо -h или --help, независимо от того случая, я хотел бы использовать

if (shopt -s nocasematch; [[ $1 = @(-h|--help) ]]); then 

подоболочка изолирует изменения в casematch этот тест, а расширенный шаблон соответствует -h или --help. (Короче, чем [[ $1 = -h || $1 = --help ]].)

+0

Спасибо, +1 и принят – ehime