Bash változó $ {0 ## * /}

Megpróbálom megérteni a ${0##*/} változót egy bash szkriptben.

Megértem, hogy az $0 tartalmazza a szkript nevét vagy elérési útját, majd ## úgy működik, mint a ${parameter##pattern} ( forrás ).

De nem értem mit csinál az / itt. Csak ezt a szintaxis törést ismerem két perjelgel: ${parameter/pat/string}

Amikor visszhangozza ezt a változót a bash-ban, kapok bash 🙂

Végül nem vagyok jogosult a szkript megosztására. Hadd mondjam csak, hogy a változót SOFT="${0##*/}" nevezzük, és egy printf utasításban használjuk "Error message sent by $SOFT"

Válasz

Ez kivágja az összes előző útelemet, csakúgy, mint basename $0 megtenné. A ## megpróbálja megtalálni az előtagminta leghosszabb illesztését:

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

A man oldalról:

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

Az ${0##*/} használatának az az oka, hogy ez nem tartalmaz külső programhívást, de kissé elfedi a folyamatokat.

Megjegyzések

  • Csak kíváncsi, hogyan szerezted ehhez a man oldalt?
  • Próbáltad már a man bash és majd a parameter##?
  • Igen, man bash -t keresgéltem, de buta vagyok, a ${, így nem talált egyezést. Köszönöm.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük