Snažím se použít rozšíření parametrů Bash k úpravě výstupu substituce příkazu nebo rozšíření jiného parametru.
Následující vnořená rozšíření fungují v Zsh docela dobře; ale výsledkem je chyba „špatná substituce“ v Bash:
${${PWD##*/}//trunk/latest}
nebo
${$(basename $PWD)//trunk/latest}
výstupem by měla být poslední složka $PWD
, nahrazené výrazem latest
když je můj aktuální adresář trunk
tedy /home/user/trunk
by se měl stát latest
Existuje ekvivalent Bash, který umožňuje řetězit expanze bez spoléhání se na proměnné nebo potrubí? Nebo expanze Bash umožňují, aby vstupem byl pouze řetězec nebo prostá proměnná?
Přijatá odpověď:
Ne, toto vnoření substitučních operátorů je jedinečné pro zsh
.
Všimněte si, že pomocí zsh
jako u (t)csh
, můžete také provést ${PWD:t:s/trunk/latest/}
.
Ačkoli bash
také podporuje tyto modifikátory historie csh pro rozšíření historie, nepodporuje je pro rozšíření svých parametrů.
Zde pomocí bash
, použijte dočasnou proměnnou:
var=${PWD##*/} var=${var//trunk/latest}