Verwenden von expr mit Zeichenfolgen

Verwenden von expr mit Zeichenfolgen

y=$(expr "$str" : ".*$x" - length "$x") kann mir bitte jemand diesen Code erklären. Ich bin neu im Scripting und habe etwas Erfahrung mit C++ und Python. Eigentlich war diese Frage Teil meines Kommentars zu einer meiner vorherigen Fragen, aber ich bekomme keine Antworten.

Antwort1

Der exprAusdruck "$str" : ".*$x"ist eine Übereinstimmung mit einem regulären Ausdruck. Die allgemeine Form ist

expr STRING : REGEXP

wo REGEXPist einverankerter regulärer Ausdruck- „verankert“ bedeutet, dass es versucht, REGEXab dem ersten Zeichen von zuzuordnen STRING. Um also $xirgendwo darin eine Übereinstimmung zu finden, $strbenötigen Sie so etwas wie .*das Aufsaugen aller Zeichen vom Anker bis zum Anfang von$x

Das Ergebnis ist die Länge des übereinstimmenden Musters - das alles einschließt, was mit übereinstimmt, .*sowie alles, was mit übereinstimmt $x. Also

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

Gibt den Startindex der Übereinstimmung von $xin zurück $stroder minus der Länge von $x, wenn keine Übereinstimmung gefunden wird. Also zum Beispiel:

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

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

Beachten Sie, dass die Verwendung zwar möglicherweise exprmit Zeichenfolgen erfolgt, jedoch tatsächlich $xals regulärer Ausdruck (GNU Basic) interpretiert wird. Seien Sie also vorsichtig, wenn der Ausdruck etwas anderes als alphanumerische Zeichen enthält.

verwandte Informationen