Bash-muuttuja $ {0 ## * /}

Yritän ymmärtää kohtaamani muuttujan ${0##*/} bash-komentosarjassa.

Ymmärrän, että $0 sisältää komentosarjan nimen tai polun, sitten ## toimii kuten ${parameter##pattern} ( -lähde ).

Mutta en ymmärrä mitä / tekee täällä. Tiedän tämän syntaksin omituisuuden vain kahdella kauttaviivalla: ${parameter/pat/string}

Kun minä toista tämä muuttuja bashissa, saan bash 🙂

Lopuksi minulla ei ole lupaa jakaa komentosarjaa. Haluan vain sanoa, että muuttujaa kutsutaan nimellä SOFT="${0##*/}" ja sitä käytetään lausekkeessa printf "Error message sent by $SOFT"

Vastaa

Tämä leikkaa kaikki edelliset polkuelementit, aivan kuten basename $0 tekisi. ## yrittää löytää etuliitemallin pisimmän vastaavan laajennuksen:

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

Man -sivulta:

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

Syy ${0##*/} -sovelluksen käyttämiseen on se, että se ei sisällä ulkoista ohjelmakutsua, mutta se on tavallaan peittämässä mitä tapahtuu. / h3>

  • Vain utelias, miten sait tähän man-sivun?
  • Oletko kokeillut man bash ja sitten etsin parameter##?
  • Joo, tein man bash, mutta typerä minua, etsin ${ joten se ei löytänyt osumaa. Kiitos.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *