${0##*/}
Bash 스크립트에서 만나는 변수를 이해하려고 합니다 .
$0
스크립트의 이름이나 경로가 포함되어 있다는 것을 알고 다음 ##
을 누릅니다 ${parameter##pattern}
(원천).
/
하지만 나는 그들이 여기서 무엇을 하는지 이해하지 못합니다 . 나는 슬래시가 두 개 있는 이 구문만 알고 있습니다.${parameter/pat/string}
Bash에서 이 변수를 에코하면 다음과 같은 결과가 나옵니다 bash
. :)
마지막으로 스크립트를 공유할 권한이 없습니다. 변수가 명령문 SOFT="${0##*/}"
에서 호출되고 사용된다고 말하고 싶습니다.printf
"Error message sent by $SOFT"
답변1
그러면 이전의 모든 경로 요소가 그대로 잘립니다 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##*/}
는 외부 프로그램 호출을 포함하지 않지만 무슨 일이 일어나고 있는지 모호하게 하기 때문입니다.