sort "$f1"
kończy się niepowodzeniem dla wartości $f1rozpoczynających się od -lub tutaj w przypadku sortniektórych, które zaczynają się od +(może mieć poważne konsekwencje dla pliku wywoływanego -o/etc/passwdna przykład).
sort -- "$f1"
(gdzie -- sygnalizuje koniec opcji) rozwiązuje większość tych problemów, ale nadal nie działa w przypadku wywoływanego pliku -(co sortoznacza, że oznacza to jego standardowe wejście).
sort < "$f1"
Nie ma tych problemów.
Tutaj jest powłoka, która otwiera plik. Oznacza to również, że jeśli pliku nie można otworzyć, pojawi się również potencjalnie bardziej przydatny komunikat o błędzie (na przykład większość powłok wskaże numer wiersza w skrypcie), a komunikat o błędzie będzie spójny, jeśli użyjesz przekierowania, tam gdzie to możliwe, do otwierania plików.
I w
sort < "$f1" > out
(w przeciwieństwie do sort -- "$f1" > out), jeśli "$f1"nie można go otworzyć, outnie zostanie utworzony / obcięty, a sortnawet nie uruchomiony.
Aby usunąć pewne możliwe nieporozumienia (następujące komentarze poniżej), nie uniemożliwia to komendzie mmap()wejścia do pliku lub lseek()wejścia do niego (nie tylko sortto), pod warunkiem, że sam plik jest widoczny. Jedyna różnica polega na tym, że plik jest otwierany wcześniej i na deskryptorze pliku 0 przez powłokę, w przeciwieństwie do późniejszej komendy na innym deskryptorze pliku. Polecenie może nadal szukać / mmap tego fd 0, jak mu się podoba. Nie należy tego mylić z cat file | cmdtym, że tym razem cmdstdin jest rurą, której nie można kształtować / szukać.