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.
man bash
és majd aparameter##
?man bash
-t keresgéltem, de buta vagyok, a${
, így nem talált egyezést. Köszönöm.