Ich bin ziemlich verwirrt über die folgenden regulären Ausdrücke, die ich in einem Shell-Skript gefunden habe:
${0##*/}
${0%/*}
Wie arbeiten Sie?
Ich bin ziemlich verwirrt über die folgenden regulären Ausdrücke, die ich in einem Shell-Skript gefunden habe:
${0##*/}
${0%/*}
Wie arbeiten Sie?
Antworten:
Dies sind keine regulären Ausdrücke, sondern Beispiele für die Parametererweiterung von Bash: die Ersetzung einer Variablen oder eines speziellen Parameters durch ihren Wert. Das Wooledge Wiki hat eine gute Erklärung .
In dem Beispiel, das Sie haben, heißt ${0##*/}das im Grunde :
Für die Variable $ 0 und das Muster '/' bedeuten die beiden Hashes vom Beginn des Parameters an, dass die längste (oder gierigste) Übereinstimmung gelöscht wird - bis einschließlich des Musters.
Also, wo $0ist der Name einer Datei, zB $HOME/documents/doc.txt, dann würde der Parameter wie folgt erweitert:doc.txt
In ähnlicher Weise wird für ${0%/*}das Muster /mit dem Ende des Parameters (the %) abgeglichen , wobei die kürzeste oder nicht gierige Übereinstimmung gelöscht wird - was im obigen Beispiel der Fall wäre $HOME/documents.
Siehe auch den Artikel im Bash Hacker-Wiki .
*) zeigt an, dass alles bis einschließlich des Musters gelöscht wird. Für den Anfang des Parameters ist #es also links und für das Ende %umgekehrt.
sh.
basenameund nicht benutzendirname? : D