sort "$f1"
Fehler für Werte $f1, die mit -oder hier beginnen, für sorteinige, die mit beginnen +(kann schwerwiegende Konsequenzen für eine beispielsweise aufgerufene Datei haben -o/etc/passwd).
sort -- "$f1"
(wobei -- das Ende der Optionen signalisiert wird) behebt die meisten dieser Probleme, schlägt jedoch für die aufgerufene Datei immer noch fehl -(was so sortinterpretiert wird, dass sie stattdessen die Standardeingabe enthält).
sort < "$f1"
Hat diese Probleme nicht.
Hier ist es die Shell, die die Datei öffnet. Dies bedeutet auch, dass, wenn die Datei nicht geöffnet werden kann, eine möglicherweise nützlichere Fehlermeldung angezeigt wird (z. B. geben die meisten Shells die Zeilennummer im Skript an) und die Fehlermeldung bei Verwendung konsistent ist Umleitungen, wo immer möglich, um Dateien zu öffnen.
Und in
sort < "$f1" > out
(im Gegensatz zu sort -- "$f1" > out), wenn "$f1"nicht geöffnet werden kann, outwird nicht erstellt / abgeschnitten und sortnicht einmal ausgeführt.
Um eine mögliche Verwirrung zu beseitigen (siehe nachfolgende Kommentare), wird der Befehl nicht daran gehindert, die Datei zu öffnen mmap()oder sich in der Datei zu befinden lseek()(dies sortgilt auch nicht), vorausgesetzt, die Datei selbst ist suchbar. Der einzige Unterschied besteht darin, dass die Datei von der Shell früher und im Dateideskriptor 0 geöffnet wird, während der Befehl später möglicherweise einen anderen Dateideskriptor verwendet. Der Befehl kann immer noch nach / mmap suchen, das fd 0, wie es gefällt. Das darf nicht verwechselt werden, wenn der Standard cat file | cmddieses Mal cmdeine Pfeife ist, die nicht gemappt / gesucht werden kann.