Ich habe ein Bash-Skript, das ein Verzeichnis als Parameter akzeptiert und nach einer gewissen Verarbeitung eine Ausgabe basierend auf den Dateien in diesem Verzeichnis ausführt.Entfernen eines optionalen/(Verzeichnisseparators) in Bash
Der Befehl wie die folgenden sein würde, wo dir
ist ein Verzeichnis mit der folgenden Struktur innerhalb
dir/foo
dir/bob
dir/haha
dir/bar
dir/sub-dir
dir/sub-dir/joe
> myscript ~/files/stuff/dir
Nach einiger Verarbeitung, würde ich die Ausgabe so etwas wie diese
foo
bar
sub-dir/joe
zu sein
Der Code, den ich den übergebenen Pfad entfernen muss, ist folgender:
shopt -s extglob
for file in $files ; do
filename=${file#${1}?(/)}
Das bringt mich zu folgendem, aber aus irgendeinem Grund wird das optionale /
nicht beachtet. So sieht meine Ausgabe wie folgt:
/foo
/bar
/sub-dir/joe
Der Grund, warum ich es optional mache ist, weil, wenn der Benutzer führt den Befehl
> myscript ~/files/stuff/dir/
Ich will es noch arbeiten. Und wenn ich diesen Befehl mit dem Schrägstrich führe, wird er wie gewünscht ausgegeben.
Also, warum funktioniert meine ?(/)
nicht? Basierend auf allem, was ich gelesen habe, sollte das die richtige Syntax sein, und ich habe auch ein paar andere Varianten ausprobiert, alles ohne Erfolg.
Danke.
'#' passt so kurz wie möglich, so dass der optionale Teil niemals enthalten ist. Du könntest '##' verwenden, um so lange wie möglich zu arbeiten. –
@thatotherguy, das hat funktioniert! Ah! Habe in der Dokumentation nichts davon gesehen. Wenn du das als Antwort aufsetzen willst, werde ich es akzeptieren, wenn ich kann. – David