GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden Sie die Parametererweiterung, um die Ausgabe einer anderen Erweiterung zu ändern?

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}

Linux
  1. Verwenden Sie $[Ausdr] anstelle von $((Ausdr))?

  2. Warum kann ich Cd nicht in einem Bash-Skript verwenden?

  3. Verwenden Sie die Erweiterung .sh oder .bash für Bash-Skripte?

  4. Wie kann man sich merken, wie man die Umleitung verwendet?

  5. Verwenden Sie Variablen innerhalb der {}-Erweiterung ohne `eval`?

So verwenden Sie Bash-Verlaufsbefehle

So verwenden Sie den Bash-Lesebefehl

Bash:In Datei schreiben

Was ist Zsch? Sollten Sie es verwenden?

Ausgabe des Befehls nach Spalten mit Bash aufteilen?

Was ist die Verwendung von $ # in Bash