Ich habe ein Skript, das ein Verzeichnis als ein Argument erfordert. Ich möchte die zwei Form unterstützen: eine ist wie
a/b/c
(kein Schrägstrich am Ende) und ein anderer ist wie
a/b/c/
(hat am Ende einen Schrägstrich).
Meine Frage: Wie kann ich bei beiden Formularen das erste Formular unverändert lassen und den letzten Schrägstrich des zweiten Formulars entfernen, um es in das erste Formular zu konvertieren?
shell-script
filenames
string
Yulong Ao
quelle
quelle
/
.rsync
.Antworten:
Nimmt den ersten Parameter des Skripts und entfernt einen abschließenden Schrägstrich, falls vorhanden.
quelle
Um einen abschließenden Schrägstrich (falls vorhanden) zu entfernen, können Sie das Erweiterungskonstrukt für den Parameter zum Entfernen von Suffixen verwenden, das in allen POSIX-Shells vorhanden ist:
Es gibt einige Komplikationen. Dadurch wird nur ein einziger Schrägstrich entfernt. Wenn Sie also mit beginnen, erhalten
a/b/c//
Sie immer noch einen Schrägstrich. Wenn der ursprüngliche Pfad vorhanden war/
, müssen Sie den Schrägstrich beibehalten. Hier ist eine komplexere Lösung, die sich um diese Fälle kümmert:Alternativ in ksh oder in bash nach
shopt -s extglob
:Beachten Sie, dass es in vielen Fällen keinen abschließenden Schrägstrich gibt. Es spielt keine Rolle, ob das Argument eine symbolische Verknüpfung zu einem Verzeichnis ist: Mit einem abschließenden Schrägstrich kennzeichnet das Argument das Verzeichnis, während das Argument ohne abschließenden Schrägstrich die symbolische Verknüpfung selbst kennzeichnet. Dies ist auch bei einigen anderen Programmen von Bedeutung. Beispielsweise wird das Quellargument von
rsync
in Abhängigkeit vom Vorhandensein eines abschließenden Schrägstrichs unterschiedlich behandelt.quelle
realpath
Löst den angegebenen Pfad auf. Unter anderem werden auch abschließende Schrägstriche entfernt. Verwenden Sie-s
diese Option, um das Folgen von Simlinks zu verhindernquelle