Ich versuche, die Bash-Parametererweiterungen zu verwenden, um die Ausgabe einer Befehlsersetzung oder einer anderen Parametererweiterung zu ändern.
Die folgenden verschachtelten Erweiterungen funktionieren recht gut in Zsh; führen aber zu einem „Bad Substitution“-Fehler in Bash:
${${PWD##*/}//trunk/latest}
oder
${$(basename $PWD)//trunk/latest}
die Ausgabe sollte der letzte Ordner des $PWD sein , ersetzt durch latest wenn mein aktuelles Verzeichnis trunk ist
also /home/user/trunk sollte latest werden
Gibt es ein Bash-Äquivalent, das es ermöglicht, Erweiterungen zu verketten, ohne sich auf Variablen oder Pipes zu verlassen? Oder erlauben Bash-Erweiterungen nur, dass die Eingabe ein String oder eine einfache Variable ist?
Akzeptierte Antwort:
Nein, diese Verschachtelung von Substitutionsoperatoren ist einzigartig für zsh .
Beachten Sie das mit zsh wie bei (t)csh , können Sie auch ${PWD:t:s/trunk/latest/} ausführen .
Obwohl bash unterstützt auch diese csh-Verlaufsmodifikatoren für die Verlaufserweiterung, es unterstützt sie nicht für seine Parametererweiterungen.
Hier mit bash , verwenden Sie eine temporäre Variable:
var=${PWD##*/} var=${var//trunk/latest}