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}