#!/bin/bash
FILE="$(basename "$1")"
FILE="${FILE/%.jpeg/.jpg}"
Gibt es überhaupt eine Möglichkeit, diese beiden Linien zu einem Einzeiler zusammenzukleben?
bash
shell
shell-script
string
gsklee
quelle
quelle
sed
wird sie definitiv benötigt, denke ich.Sie können Erweiterungen nicht in Bash (oder in Ksh, Asche und anderen Muscheln außer Zsh) verschachteln. Dies ist nur eine kosmetische Einschränkung, da Sie, wie Sie veranschaulichen, einer temporären Variablen einen Zwischenausdruck zuweisen können. Es ist ein wenig nervig für Einzeiler, aber in Skripten ist es wohl besser für die Lesbarkeit.
Sie können die Verwendung des externen Dienstprogramms vermeiden
basename
und stattdessen ein Konstrukt zur Manipulation von Zeichenfolgen verwenden:Hier kann es vorkommen, dass Sie Ihr Skript neu schreiben können, um die Befehlsersetzung nach außen zu verschieben . Das ist kein allgemeines Phänomen, und Sie gewinnen auch nichts anderes als ein bestimmtes Einzeiler-Gefühl.
Zsh, zum Guten oder zum Schlechten, lässt Sie Erweiterungen verschachteln:
Oder Sie können das integrierte Konstrukt von zsh anstelle von
basename
:quelle
Ich würde gehen für:
Der zweite Parameter für den Basisnamen ist ein Suffix, das aus dem Dateinamen entfernt werden soll (siehe
man basename
).quelle
Sie können einen einzelnen
sed
Befehl wie folgt verwenden:quelle
Die Einbeziehung
sed
sollte dieser den Trick:(Dies beantwortet Ihre Frage nicht genau, weil ich es nicht kann. Ich bin mir nicht sicher, ob es möglich ist.)
quelle
Die Bash-
${}
Konstrukte arbeiten mit Variablennamen , sodass ein Befehl nicht direkt eingebettet werden kann. Der Ansatz von @ sr_ ist eine Alternative, wenn Ihnen die zusätzliche Gabel nichts ausmacht.quelle
Die Linie
kann gekürzt und tragbarer gemacht werden mit
quelle