Bash-variabel $ {0 ## * /}

Jeg prøver at forstå variablen ${0##*/}, som jeg stødte på i et bash-script.

Jeg forstår, at $0 indeholder navnet eller stien til scriptet, så ## fungerer som i ${parameter##pattern} ( kilde ).

Men jeg forstår ikke hvad / laver her. Jeg kender kun denne slags syntaks med to skråstreger: ${parameter/pat/string}

Når jeg ekko denne variabel i bash, jeg får bash 🙂

Endelig har jeg ikke tilladelse til at dele scriptet. Lad mig bare sige, at variablen hedder SOFT="${0##*/}" og bruges i en printf udsagn "Error message sent by $SOFT"

Svar

Denne klipning af alle de foregående stikelementer, ligesom basename $0 ville gøre. ## forsøger at finde den længste matchende udvidelse af præfiksmønsteret:

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

Fra mandsiden:

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

Årsagen til at bruge ${0##*/} er, at det ikke involverer et eksternt programopkald, men det er en slags skjult, hvad der foregår.

Kommentarer

  • Bare nysgerrig, hvordan fik du mandsiden til dette?
  • Har du prøvet man bash og så søgte efter parameter##?
  • Ja, jeg gjorde man bash men fjollede mig, jeg søgte efter ${ så det kunne ikke finde noget match. Tak.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *