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
傳回in匹配項的起始索引,如果未找到匹配項,$str
則減去 的長度。$x
例如:
$ expr foobarbaz : ".*bar" - length bar
3
$ expr foobar : ".*baz" - length baz
-3
請注意,雖然您可能“使用expr
字串”,但它實際上會解釋$x
為(GNU 基本)正則表達式 - 因此,如果它包含字母數字字元以外的任何內容,請小心。