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.
man bash
og så søkte etterparameter##
?man bash
men tullet meg, jeg søkte etter${
så den kunne ikke finne noe samsvar. Takk.