Snažím se porozumět proměnné ${0##*/}
, se kterou jsem se setkal v bash skriptu.
Rozumím tomu, že $0
obsahuje název nebo cestu skriptu, potom ##
funguje jako v ${parameter##pattern}
( zdroj ).
Ale já nerozumím co tady /
dělá. Znám tento syntax syntaxe pouze se dvěma lomítky: ${parameter/pat/string}
Když jsem echo this variable in bash, I get bash
🙂
Nakonec nemám oprávnění ke sdílení skriptu. Dovolte mi jen říci, že proměnná se nazývá SOFT="${0##*/}"
a používá se v prohlášení printf
"Error message sent by $SOFT"
Odpovědět
Toto vyjme všechny předchozí prvky cesty, stejně jako basename $0
udělá. ##
se snaží najít nejdelší shodné rozšíření vzoru předpony:
$ x=/a/b/c/d $ echo ${x##*/} d $ basename $x d
Z manuálové stránky:
${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.
Důvodem pro použití ${0##*/}
je, že nezahrnuje externí programové volání, ale je to tak trochu zakrývání toho, o co jde.
man bash
a poté jsem hledalparameter##
?man bash
, ale hloupě jsem hledal${
takže se nepodařilo najít shodu. Děkujeme.