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
где cmd
stdin на этот раз является каналом, который не может быть преобразован / найден.