Ich versuche, eine Variable in einem sh-Skript auf die letzten 3 Zeichen des Basisnamens einer Datei zu setzen (mit Basisname meine ich ohne Pfad und ohne Suffix). Ich habe es geschafft, aber ich frage mich, ob es einen kürzeren, einzelnen Befehl gibt, den ich aus Neugier verwenden kann. Ursprünglich hatte ich ein Einzeiler mit awk
, aber es war ziemlich lang. Derzeit habe ich dieses zweizeilige Skript (unter der Annahme, dass sich ein vollständiger Dateiname in befindet $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
So endet beispielsweise "/path/to/somefile.txt" mit "ile" in $lastpart
.
Kann ich irgendwie kombinieren basename
und das Bit, um das Suffix in einem einzigen Befehl zu trennen, und gibt es eine Möglichkeit, es an tail
(oder etwas anderes, das ich verwenden kann) zu senden, ohne eine Pipe zu verwenden? Das Suffix ist unbekannt, daher kann ich es nicht als Parameter verwenden basename
.
Das Hauptziel ist nicht, so kurz wie möglich zu sein, sondern auf einen Blick so gut wie möglich lesbar zu sein. Der eigentliche Kontext all dessen ist diese Frage zum Superuser , bei der ich versuche, eine einigermaßen einfache Antwort zu finden.
two
würde funktionieren; die verlängerung dazu wäre wohl .three
ich.
file.one.two.three
? Möchtest duile
odertwo
?