Ich versuche, mein erstes Bash-Skript zu korrigieren, und irgendwann wird ein Dateiname an das Skript als übergeben $1
. Ich muss den Dateinamen ohne die Erweiterung extrahieren.
Derzeit gehe ich davon aus, dass alle Erweiterungen aus drei Buchstaben bestehen. Daher entferne ich die letzten 4 Zeichen, um den Dateinamen zu erhalten:
a="${1:0:-4}"
Aber ich muss in der Lage sein, mit Erweiterungen zu arbeiten, die mehr als drei Zeichen haben, wie %~n1
in Windows.
Gibt es eine Möglichkeit, den Dateinamen ohne die Erweiterung aus den Argumenten zu extrahieren?
Antworten:
Der übliche Weg, dies in Bash zu tun, ist die Parametererweiterung. (Siehe die Bash- Manpage und suchen Sie nach "Parametererweiterung".)
Das
%
gibt an, dass alles, was mit dem folgenden Muster (.*
) von rechts übereinstimmt , unter Verwendung der kürzestmöglichen Übereinstimmung aus dem Parameter gelöscht werden soll$1
. In diesem Fall benötigen Sie keine doppelten Anführungszeichen (") um den Ausdruck.quelle
${1%.*}
Wird zurückkehrenSomething.eng
. Wenn Sie alles rechts von der ersten entfernen möchten,.
einschließlich der.
, verwenden Sie${1%%.*}
, die zurückgegeben wirdSomething
.Wenn Sie die Erweiterung kennen, können Sie den Basisnamen verwenden
quelle
Einzeiler in Bash ohne Verwendung des Basisnamens :
quelle