Как сопоставить «что-то или ничего» в регулярном выражении bash?

У меня возникли проблемы с захватом цифры в строке этого формата (t|b|bug_|task_|)1234с использованием регулярного выражения bash. Приведенное ниже не работает:

[[ $current_branch =~ ^(t|b|bug_|task_|)([0-9]+) ]]

Но как только я изменю это на что-то вроде этого:

[[ $current_branch =~ ^(t|b|bug_|task_)([0-9]+) ]]

это работает, но, конечно, это неправильно, потому что это не охватывает случай, когда нет префиксов. Я понимаю, что в этом случае я мог бы сделать

[[ $current_branch =~ ^(t|b|bug_|task_)?([0-9]+) ]]

и добиться того же результата, но я хотел бы знать, почему второй пример не работает. Например, это регулярное выражение отлично работает в Ruby.

(Это на GNU bash, версия 3.2.48(1)-релиз (x86_64-apple-darwin11), OSX Lion)

7
задан Suan 29 May 2012 в 19:34
поделиться