GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzare l'espansione dei parametri per modificare l'output di un'altra espansione?

Sto cercando di utilizzare le espansioni dei parametri Bash per modificare l'output di una sostituzione di comando o di un'altra espansione di parametri.

Le seguenti espansioni nidificate funzionano abbastanza bene in Zsh; ma provoca un errore di "sostituzione errata" in Bash:

${${PWD##*/}//trunk/latest}

o

${$(basename $PWD)//trunk/latest}

l'output dovrebbe essere l'ultima cartella del $PWD , sostituito da latest quando la mia directory corrente è trunk

quindi /home/user/trunk dovrebbe diventare latest

Esiste un equivalente Bash che consente di concatenare le espansioni senza fare affidamento su variabili o pipe? Oppure le espansioni Bash consentono solo all'input di essere una stringa o una semplice variabile?

Risposta accettata:

No, l'annidamento degli operatori di sostituzione è univoco per zsh .

Nota che con zsh come con (t)csh , puoi anche fare ${PWD:t:s/trunk/latest/} .

Sebbene bash supporta anche quei modificatori di cronologia csh per l'espansione della cronologia, non li supporta per le sue espansioni dei parametri.

Qui con bash , usa una variabile temporanea:

var=${PWD##*/} var=${var//trunk/latest}

Linux
  1. Come visualizzare l'output di un processo in esecuzione in un'altra sessione Bash?

  2. Utilizzare l'estensione .sh o .bash per gli script Bash?

  3. Come ricordare come utilizzare il reindirizzamento?

  4. Usa variabili all'interno di {} Espansione senza `eval`?

  5. `~#` è un'espansione di Tilde di Bash?

Come utilizzare il comando di lettura Bash

Bash:Scrivi su file

Espansione e variabili Bash Brace?

Perché non posso usare Cd in uno script Bash??

Cos'è Zsh? Dovresti usarlo?

Qual è l'uso di $# in Bash