Ich versuche, ein Skript zu schreiben, das den Basisnamen eines Arguments annimmt, und prüft dann, ob es in diesem Argument eine Erweiterung gibt. Ist dies der Fall, wird die Erweiterung gedruckt.
Hier ist mein Code:
%Vor%Ich wiederhole den letzten $ Basisnamen $ 1, um zu überprüfen, was die Ausgabe von Basisname ist.
Einige Tests zeigen:
%Vor%Also funktioniert weder $ basename $ 1 noch. Ich weiß, dass es ein Syntaxfehler ist, also könnte jemand erklären, was ich falsch mache?
BEARBEITEN:
Ich habe mein Problem jetzt gelöst mit:
%Vor%Was mein Argument auf einen Basisnamen reduziert, vielen Dank.
Wenn Sie einer Ausgabe die Ausgabe eines Befehls zuweisen möchten, müssen Sie sie entweder mit umgekehrten Anführungszeichen oder mit einer speziellen Klammer ausführen:
%Vor%Um die Dateinamenerweiterung zu entfernen, sollten Sie
machen %Vor% das wird den Wert von $file
erhalten, dann entferne alles bis zu dem Punkt (deshalb ist es notwendig). Wenn Ihr Dateiname Perioden enthält, dann sollten Sie ext=${file##*.}
verwenden, wobei ##
der bash befiehlt, die längste Zeichenfolge zu löschen, die anstelle der kürzesten übereinstimmt, sodass sie bis zur letzten Periode gelöscht wird, anstatt der ersten.
Dein echo $basename
ist seltsam. Es ist bash, um den Wert einer Variablen namens $basename
und den Wert der Variablen zu drucken, der das erste Argument für das Skript (oder die Funktion) ist.
Wenn Sie den Befehl, den Sie auszuführen versuchen, ausdrucken wollen, tun Sie dies:
%Vor%Wenn Sie versuchen, die Ausgabe des Befehls zu drucken, können Sie Folgendes tun:
%Vor%Hoffe das hilft =)
Tags und Links bash