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}