Proměnná Bash $ {0 ## * /}

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.

Komentáře

  • Zajímalo by mě, jak jste k tomu dostali manuálovou stránku?
  • Zkoušeli jste man bash a poté jsem hledal parameter##?
  • Ano, udělal jsem man bash, ale hloupě jsem hledal ${ takže se nepodařilo najít shodu. Děkujeme.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *