Isso se refere ao GNU expr
(parte do coreutils) e os \(
e \)
estão marcando um grupo como documentado em 16.4.1 Expressões de string :
If the match succeeds and regex uses
‘\(’
and‘\)’
, the : expression returns the part of string that matched the subexpression; otherwise, it returns the number of characters matched.
A documentação refere-se a 3 expressões regulares em grep
para detalhes. A sintaxe de expressões regulares é documentada em POSIX:
Consistent with the whole match being the longest of the leftmost matches, each subpattern, from left to right, shall match the longest possible string. For this purpose, a null string shall be considered to be longer than no match at all. For example, matching the BRE
"\(.*\).*"
against"abcdef"
, the subexpression"()"
is "abcdef", and matching the BRE"\(a*\)*"
against "bc", the subexpression"()"
is the null string.
POSIX expr
menciona expressões regulares com o operador :
:
expr1 : expr2
mas continua dizendo:
The use of string arguments
length
, substr, index, ormatch
produces unspecified results.
para que esse uso específico pareça ser uma extensão.
O uso POSIX de :
está documentado em detalhes na seção Expressão correspondente ; o operador match visto aqui corresponde ao :
, mas a sua posição é alterada para um operador prefixo (antes dos dois operadores) onde POSIX :
usa infix (entre os dois operandos).
Visto como um grupo, o comprimento , etc., pode ser considerado como uma extensão (um recurso não padrão que fornece funcionalidade não alcançável através de uma determinada utilidade) ou meramente não padrão (uma maneira incompatível de executar uma função que pode ser feita através de um método diferente). Este é um misto: o shell POSIX fornece uma funcionalidade semelhante para length , etc., conforme documentado na seção Substituição de parâmetros , ou seja, ${#parameter}
. No entanto, substr e índice não têm equivalente exato aparente. (Embora a sintaxe difere, o grupo inteiro é provavelmente baseado em awk
).