sort "$f1"
терпит неудачу для значений $f1этого начала с -или здесь для случая, sortкоторый начинается с +(может иметь серьезные последствия для файла, называемого, -o/etc/passwdнапример).
sort -- "$f1"
(где -- сигнализирует об окончании опций) решает большинство из этих проблем, но все еще не работает для вызываемого файла -(который sortвместо этого интерпретирует значение его стандартного ввода).
sort < "$f1"
Не имеет этих проблем.
Здесь это оболочка, которая открывает файл. Это также означает, что если файл не может быть открыт, вы также получите потенциально более полезное сообщение об ошибке (например, большинство оболочек будет указывать номер строки в скрипте), и сообщение об ошибке будет согласованным, если вы используете перенаправления, где это возможно, чтобы открыть файлы.
И в
sort < "$f1" > out
(вопреки sort -- "$f1" > out), если "$f1"не может быть открыт, outне будет создан / усечен и sortдаже не запущен.
Чтобы устранить возможную путаницу (следуя комментариям ниже), это не мешает команде mmap()вводить файл или lseek()вставлять в него (а это sortне так), если сам файл доступен для поиска. Единственное отличие состоит в том, что файл открывается ранее и в дескрипторе файла 0 оболочкой, а не позже командой, возможно, в другом дескрипторе файла. Команда все еще может искать / mmap, что fd 0, как ей угодно. Это не следует путать с тем, cat file | cmdгде cmdstdin на этот раз является каналом, который не может быть преобразован / найден.