использование expr со строками

использование expr со строками

y=$(expr "$str" : ".*$x" - length "$x") может кто-нибудь объяснить этот кусок кода. Я новичок в написании скриптов и имею некоторый опыт работы с c++ и python. На самом деле этот вопрос был частью моего комментария к одному из моих предыдущих вопросов, но я не получаю никаких ответов.

решение1

Выражение является соответствием регулярному выражению. Общая форма expr:"$str" : ".*$x"

expr STRING : REGEXP

где REGEXPнаходитсязакрепленное регулярное выражение- «привязанный» означает, что он пытается сопоставить, REGEXначиная с первого символа STRING, поэтому для того, чтобы сопоставить $xгде-либо внутри, $strвам нужно что-то вроде того .*, чтобы захватить все символы от привязки до начала$x

Результатом является длина сопоставленного шаблона, которая включает в себя все сопоставленное с , .*а также все сопоставленное с $x. Таким образом

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

возвращает начальный индекс совпадения $xв $strили минус длину, $xесли совпадение не найдено. Например:

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

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

Обратите внимание, что хотя вы можете «использовать exprсо строками», на самом деле это будет интерпретироваться $xкак регулярное выражение (GNU basic), поэтому будьте осторожны, если оно содержит что-либо, кроме буквенно-цифровых символов.

Связанный контент