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

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

0
задан 4 June 2021 в 14:00

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) - поэтому будьте осторожны, если оно содержит что-либо кроме буквенно-цифровых символов.

5
ответ дан 28 July 2021 в 11:32

Другие вопросы по тегам:

Похожие вопросы: