Ihr unmittelbares Problem ist, dass Sie müssen grep
anweisen, den Suchbegriff als wörtliche eher als ein regulärer Ausdruck zu interpretieren, mit der -F
Option:
var=$(grep -Fe "$arq" ARQ02)
Auf diese Weise jede Regex Metazeichen, die zufällig in der Ausgabe von ls /home/lint
sind - wie [
und - werden immer noch als Literale behandelt und wird nicht die 01 brechenAufruf.
Das heißt, es sieht aus wie Ihr Befehl, wie durch rationalisiert werden, um die Ausgabe von ls /home/lint
direkt als die Menge der Suchzeichenfolgen mit bis grep
sofort, passieren, mit der -f
Option:
grep -Ff <(ls /home/lint) ARQ02 > result
<(...)
ist eine sogenannte process substitution, die, einfach ausgedrückt, präsentiert th e Ausgabe von einem Befehl, als wäre es eine (temporäre) Datei, die -f
erwartet: eine Datei mit den Suchbegriffen für grep
.
Wenn alternativ:
die Linien ARQ02
enthalten nur Dateinamen, die vollständig Spiel (einige) der Dateinamen in der Ausgabe von ls /home/lint
und
Es stört Sie nicht Sortierung oder möchten die ingespeicherten Übereinstimmungen sortieren,
betrachten HuStmpHrrr's helpful answer.
Was ist 'ARQ02'? es scheint mir eine Datei. Also sagst du nur, ob deine Dateien in bestimmten Ordnern zufällig eine Untermenge der Dateien sind, die in einer anderen Datei aufgelistet sind? Es gibt eine Reihe von häufigen Fehlern, die Sie hier in einem so kurzen Skript machen. – HuStmpHrrr