Bash 변수 $ {0 ## * /}

만난 변수 ${0##*/}를 이해하려고합니다. bash 스크립트에서.

$0에 스크립트의 이름 또는 경로가 포함 된 다음 ##${parameter##pattern} ( 소스 )에서와 같이 작동합니다.

하지만 이해가되지 않습니다. /가 여기서하는 일입니다. 슬래시가 두 개인 구문의 꼬임 만 알고 있습니다. ${parameter/pat/string}

bash에서이 변수를 에코하면 bash 🙂

마지막으로 스크립트를 공유 할 권한이 없습니다. 변수 이름이 SOFT="${0##*/}"이고 printf"Error message sent by $SOFT"

답변

basename $0 할 것입니다. ##는 접두사 패턴의 가장 긴 일치 확장을 찾으려고합니다.

 $ x=/a/b/c/d $ echo ${x##*/} d $ basename $x d  

맨 페이지에서 :

 ${parameter##word} Remove matching prefix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches the beginning of the value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ``#"" case) or the longest matching pat‐ tern (the ``##"" case) deleted.  

${0##*/}를 사용하는 이유는 “외부 프로그램 호출을 포함하지 않지만 진행 상황을 모호하게 만들기 때문입니다.

댓글

  • 궁금한 점이 있습니다.이 매뉴얼 페이지는 어떻게 얻었습니까?
  • man bash를 사용해 보셨습니까? 그런 다음 parameter##를 검색 했습니까?
  • 예, man bash를 수행했지만 어리석은 날,

    일치 항목을 찾지 못했습니다. 감사합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다