usando expr com strings

usando expr com strings

y=$(expr "$str" : ".*$x" - length "$x") alguém pode explicar este pedaço de código. Sou novo em scripts e tenho alguma experiência com c++ e python. Na verdade, esta pergunta fazia parte do meu comentário a uma das minhas perguntas anteriores, mas não estou obtendo nenhuma resposta.

Responder1

A exprexpressão "$str" : ".*$x"é uma correspondência de expressão regular. A forma geral é

expr STRING : REGEXP

onde REGEXPestá umexpressão regular ancorada- "ancorado", o que significa que ele tenta combinar REGEXa partir do primeiro caractere de STRING, portanto, para corresponder $xa qualquer lugar dentro, $strvocê precisa de algo como .*engolir todos os caracteres desde a âncora até o início de$x

O resultado é o comprimento do padrão correspondente - que inclui tudo o que corresponde a , .*bem como tudo o que corresponde a $x. Então

expr  "$str" : ".*$x" - length "$x"

retorna o índice inicial da correspondência de $xin $strou menos o comprimento de $xse nenhuma correspondência for encontrada. Então, por exemplo:

$ expr foobarbaz : ".*bar" - length bar
3

$ expr foobar : ".*baz" - length baz
-3

Observe que embora você possa estar "usando exprcom strings", na verdade ela será interpretada $xcomo uma expressão regular (básica GNU) - portanto, tome cuidado se ela contiver algo diferente de caracteres alfanuméricos.

informação relacionada