이 expr은 쉘 스크립트에서 어떤 역할을 합니까?

이 expr은 쉘 스크립트에서 어떤 역할을 합니까?

다음의 구체적인 기능은 무엇입니까?

newProg=`expr "${newProg}" : ".* -> \(.*\)$"`   
if expr "x${newProg}" : 'x/' >/dev/null; then    
   prog="${newProg}"     
else    
    progdir=`dirname "${prog}"`   
    prog="${progdir}/${newProg}"    
fi   

답변1

이것첫 번째회선 사용량expr도착하다:

항상 캡처하고 출력하는 탐욕스러운 일치 의미론마지막->이러한 일치이므로 출력에 a 가 절대 없을 것입니다.

예를 들어, 이는 ls -l타겟을 찾기 위해 심볼릭 링크의 출력을 구문 분석합니다(정상적으로 작동하는 파일 이름 등을 제공하며 일반적인 경고를 제공합니다).

이것두번째줄은 expr새 값이 newProga로 시작 하는지 확인하는 데 다시 사용됩니다 /. 즉, 절대 경로를 나타냅니다.

이 경우 prog해당 값으로 설정하면 됩니다. 그렇지 않은 경우 on(이 코드 조각에서는 정의되지 않은 변수)을 사용하여 prog계산된 상대 경로로 설정하세요. 그 효과는 아마도 원래 위치를 기준으로 경로를 구성하는 것입니다.dirname$prog


목표가 단순히 순수 POSIX보다 더 강력한 쉘이나 환경이라면 구문 분석 시간을 절약할 수 있는 매우 일반적인 명령이 expr있을 수도 있습니다 .readlinkls

관련 정보