Was ist der maximale Zeichenbereich von grep in Bash? Wie lang kann eine Zeichenfolge als Eingabe für die Suche mit dem Befehl grep sein?
Antwort1
Die maximale Länge der Argumente der exec()
Funktion (die von der Shell zum Starten eines Prozesses verwendet werden) wird durch den Wert ARG_MAX
im limits.h
Header definiert. Dieser Wert ist auch über den getconf
Befehl verfügbar. Auf meinem System:
$ getconf ARG_MAX
262144
Das bedeutet, dass die komplette Kommandozeile (nachdem alle Variablensubstitutionen etc. abgearbeitet wurden)einschließlich aller Umgebungsvariablen und ihrer Werte, darf 256 KiB nicht überschreiten, damit die Shell es garantiert akzeptiert.
POSIX garantiert, dass ARG_MAX
es mindestens 4096 sind.
Eine Linux-spezifische Erläuterung zu ARG_MAX
finden Sie unterAntwort von Stéphane Chazelas auf eine verwandte Frage.
Eine ausführliche Diskussion zu diesem Thema finden Sie unterhttps://www.in-ulm.de/~mascheck/various/argmax/(externer Link).
Mit grep -f patterns file
können Sie die maximale Länge der Befehlszeile umgehen, indem Sie die gewünschten Muster grep
in die Datei einfügen patterns
. Die Anzahl der Muster wird dann durch Ihren verfügbaren RAM begrenzt und nicht durch eine systembedingte Begrenzung der Befehlszeilenlänge.