Variabile di Bash $ {0 ## * /}


8

Sto cercando di capire la variabile ${0##*/}che ho riscontrato in uno script bash.

Capisco che $0contiene il nome o il percorso dello script, quindi ##funziona come in ${parameter##pattern}( sorgente ).

Ma non capisco cosa ci /faccia qui. Conosco solo questo nodo di sintassi con due barre:${parameter/pat/string}

Quando faccio eco a questa variabile in bash, ottengo bash:)

Infine, non ho l'autorizzazione per condividere lo script. Vorrei solo dire che la variabile viene chiamata SOFT="${0##*/}"e viene utilizzata in printfun'istruzione"Error message sent by $SOFT"

Risposte:


12

Ciò taglia tutti gli elementi del percorso precedente, proprio come basename $0farebbe. Il ##tentativo di trovare l'espansione di corrispondenza più lunga del modello di prefisso:

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

Dalla pagina man:

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

Il motivo dell'utilizzo ${0##*/}è che non comporta una chiamata di programma esterna, ma è in qualche modo oscurare ciò che sta succedendo.


Solo curioso, come hai ottenuto la pagina man per questo?
Psycho Punch,

Hai provato man bashe poi cercato parameter##?
Anthon,

Sì, l'ho fatto man bashma sciocco, ho cercato ${quindi non è stato possibile trovare un riscontro. Grazie.
Psycho Punch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.