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
"문자열과 함께 사용"할 수도 있지만 실제로는 (GNU 기본) 정규식으로 expr
해석되므로 영숫자 문자 이외의 문자가 포함되어 있으면 주의하십시오.$x