將 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傳回in匹配項的起始索引,如果未找到匹配項,$str則減去 的長度。$x例如:

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

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

請注意,雖然您可能“使用expr字串”,但它實際上會解釋$x為(GNU 基本)正則表達式 - 因此,如果它包含字母數字字元以外的任何內容,請小心。

相關內容