Bash-Variable $ {0 ## * /}

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

Ich verstehe, dass $0 den Namen oder den Pfad des Skripts enthält, dann ## funktioniert wie in ${parameter##pattern} ( source ).

Aber ich verstehe nicht Was die / hier tut. Ich kenne diesen Syntaxknick nur mit zwei Schrägstrichen: ${parameter/pat/string}

Wenn ich Echo dieser Variablen in Bash, ich erhalte bash 🙂

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

Antwort

Hiermit werden alle vorhergehenden Pfadelemente abgeschnitten, genau wie basename $0 würde tun. Die ## versucht, die am längsten passende Erweiterung des Präfixmusters zu finden:

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

Auf 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 von ${0##*/} ist, dass kein externer Programmaufruf erforderlich ist, aber die Vorgänge irgendwie verdeckt werden.

Kommentare

  • Nur neugierig, wie haben Sie die Manpage dazu bekommen?
  • Haben Sie man bash und versucht dann nach parameter## gesucht?
  • Ja, ich habe man bash gemacht, aber dumm, ich habe nach ${, daher konnte keine Übereinstimmung gefunden werden. Danke.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.