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.
man bash
og så søgte efterparameter##
?man bash
men fjollede mig, jeg søgte efter${
så det kunne ikke finde noget match. Tak.