Bash-variabel $ {0 ## * /} (Norsk)

Jeg prøver å forstå variabelen ${0##*/} jeg møtte i et bash-skript.

Jeg forstår at $0 inneholder navnet eller banen til skriptet, og deretter ## fungerer som i ${parameter##pattern} ( kilde ).

Men jeg forstår ikke hva / gjør her. Jeg kjenner bare denne syntaksen med to skråstreker: ${parameter/pat/string}

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

Til slutt har jeg ikke autorisasjon til å dele skriptet. La meg bare si at variabelen heter SOFT="${0##*/}" og brukes i en printf uttalelse "Error message sent by $SOFT"

Svar

Dette kutter av alle de foregående banelementene, akkurat som basename $0 ville gjort. ## prøver å finne den lengste matchende utvidelsen av prefiksmønsteret:

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

Fra mannssiden:

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

Årsaken til å bruke ${0##*/} er at den ikke involverer et eksternt programanrop, men det er en slags skjul på hva som skjer.

Kommentarer

  • Bare nysgjerrig, hvordan fikk du mannssiden til dette?
  • Har du prøvd man bash og så søkte etter parameter##?
  • Ja, jeg gjorde man bash men tullet meg, jeg søkte etter ${ så den kunne ikke finne noe samsvar. Takk.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *