Как `[] []` соответствует "или [или]"? - PullRequest
0 голосов
/ 18 марта 2019

Рассмотрим:

$ echo 'a [b][c]' | awk -F '[\\]\\[]' '{print $2}'
b

Это имеет смысл для меня как действительного регулярного выражения для [ или ].

Все же это также работает:

$ echo 'a [b][c]' | awk -F '[][]' '{print $2}'
b

И аналогично в grep:

$ echo 'a [b][c]' | grep '[][]'
a [b][c]

Но я не понимаю как. [][], кажется, "соответствует без символов" (то есть, []) дважды подряд. Что происходит?

1 Ответ

4 голосов
/ 18 марта 2019

См. Элемент списка 1 в "RE Bracket Expression" в спецификации регулярного выражения POSIX (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05):

The <right-square-bracket> ( ']' ) shall lose its special meaning and represent itself in a bracket expression if it occurs first in the list

Учитывая, что [][] представляет выражение [...] в скобках, которое содержит список из 2 символов, ] и [.

Использование обратной косой черты для экранирования ] в выражении в скобках взамен не POSIX, но некоторые версии некоторых инструментов будут принимать - YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...