GNU/Linux >> Znalost Linux >  >> Linux

Použít rozšíření parametrů k úpravě výstupu jiného rozšíření?

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}

Linux
  1. Jak zobrazit výstup běžícího procesu v jiné relaci Bash?

  2. Expanze závorky Bash a proměnné?

  3. Použít rozšíření .sh nebo .bash pro skripty Bash?

  1. Jak používat příkazy historie Bash

  2. Použít $[ Expr ] místo $(( Expr ))?

  3. Použití výstupu předchozích příkazů v bash

  1. Proč nemohu použít CD ve skriptu Bash?

  2. Jak si zapamatovat Jak používat přesměrování?

  3. Použít proměnné uvnitř rozšíření {} bez `eval`?