![이 expr은 쉘 스크립트에서 어떤 역할을 합니까?](https://linux55.com/image/115452/%EC%9D%B4%20expr%EC%9D%80%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%96%B4%EB%96%A4%20%EC%97%AD%ED%95%A0%EC%9D%84%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
다음의 구체적인 기능은 무엇입니까?
newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
if expr "x${newProg}" : 'x/' >/dev/null; then
prog="${newProg}"
else
progdir=`dirname "${prog}"`
prog="${progdir}/${newProg}"
fi
답변1
이것첫 번째회선 사용량expr
도착하다:
$newProg
값을 다음으로 변환하십시오.기본 정규식.* -> \(.*\)$
(양쪽 끝은 고정되어 있습니다.) 여기->
에 뭔가가 있습니다 .newProg
원래 값의 일부로 설정캡처 하위 표현식과 일치합니다.괄호 안에 기재(다음 부분->
).
항상 캡처하고 출력하는 탐욕스러운 일치 의미론마지막->
이러한 일치이므로 출력에 a 가 절대 없을 것입니다.
예를 들어, 이는 ls -l
타겟을 찾기 위해 심볼릭 링크의 출력을 구문 분석합니다(정상적으로 작동하는 파일 이름 등을 제공하며 일반적인 경고를 제공합니다).
이것두번째줄은 expr
새 값이 newProg
a로 시작 하는지 확인하는 데 다시 사용됩니다 /
. 즉, 절대 경로를 나타냅니다.
이 경우 prog
해당 값으로 설정하면 됩니다. 그렇지 않은 경우 on(이 코드 조각에서는 정의되지 않은 변수)을 사용하여 prog
계산된 상대 경로로 설정하세요. 그 효과는 아마도 원래 위치를 기준으로 경로를 구성하는 것입니다.dirname
$prog
목표가 단순히 순수 POSIX보다 더 강력한 쉘이나 환경이라면 구문 분석 시간을 절약할 수 있는 매우 일반적인 명령이 expr
있을 수도 있습니다 .readlink
ls