Bash-Variable $ {0 ## * /}


8

Ich versuche, die Variable zu verstehen, auf die ${0##*/}ich in einem Bash-Skript gestoßen bin.

Ich verstehe, dass $0der Name oder der Pfad des Skripts enthält und dann ##wie in ${parameter##pattern}( Quelle ) funktioniert .

Aber ich verstehe nicht, was der /hier macht. Ich kenne diesen Knick der Syntax nur mit zwei Schrägstrichen:${parameter/pat/string}

Wenn ich diese Variable in bash wiederhole, bekomme ich bash:)

Schließlich habe ich nicht die Berechtigung, das Skript freizugeben. Lassen Sie mich nur sagen, dass die Variable aufgerufen SOFT="${0##*/}"und in einer printfAnweisung verwendet wird"Error message sent by $SOFT"

Antworten:


12

Dies schneidet alle vorhergehenden Pfadelemente, genau wie basename $0dies der Fall wäre. Der ##versucht, die längste übereinstimmende Erweiterung des Präfixmusters zu finden:

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

Von der Manpage:

${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.  

Der Grund für die Verwendung ${0##*/}ist, dass es sich nicht um einen externen Programmaufruf handelt, sondern dass die Vorgänge irgendwie verdeckt werden.


Nur neugierig, wie hast du die Manpage dafür bekommen?
Psycho Punch

Haben Sie es versucht man bashund dann gesucht parameter##?
Anthon

Ja, ich habe es getan, man bashaber dumm mich, ich habe gesucht, ${damit es keine Übereinstimmung gefunden hat. Vielen Dank.
Psycho Punch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.