Ich lese Strings aus einer Blacklist-Datei, die Dateien und Ordner enthält, die gelöscht werden sollen. Es funktioniert für einfache Dateinamen, aber nicht für Platzhalter.erweitern Platzhalter in Zeichenfolge Variable
z. Wenn ich auf die Shell rm -rf !(abc|def)
tippe, löscht es alle außer diesen beiden Dateien. Wenn diese Zeichenfolge !(abc|def)
in die Blacklist gesetzt wird, funktioniert sie nicht, da die Zeichenfolge nicht ausgewertet wird.
Also habe ich versucht, eval
zu verwenden, aber es funktioniert nicht wie erwartet.
#!/bin/bash
# test pattern (normally read from blacklist file)
LINE="!(abc|def)"
# output string
echo "$LINE"
# try to expand this wildcards
eval "ls $LINE"
# try with subshell
(ls $LINE)
Wie kann ich das funktionieren lassen?
'Ich lese Strings aus einer Blacklist-Datei': Wie? Ihr Code zeigt diesen Teil nicht an. – sjsam
Sie sind besser dran, indem Sie mit -regex und -delete dafür suchen. –
sjsam, ich habe diesen Teil nicht gezeigt, weil er nichts mit meinem Problem zu tun hat. Ich habe ein abgespecktes Skript vorbereitet, um das Problem zu reproduzieren. – user3150128