sort "$f1"
gagal untuk nilai $f1
yang dimulai dengan -
atau di sini untuk kasus sort
beberapa yang dimulai dengan +
(dapat memiliki konsekuensi parah untuk file yang dipanggil -o/etc/passwd
misalnya).
sort -- "$f1"
(di mana --
menandakan akhir opsi) menangani sebagian besar masalah tersebut tetapi masih gagal untuk file yang dipanggil -
(yang sort
menafsirkan sebagai stdin sebagai gantinya).
sort < "$f1"
Tidak memiliki masalah itu.
Di sini, itu shell yang membuka file. Ini juga berarti bahwa jika file tidak dapat dibuka, Anda juga akan mendapatkan pesan kesalahan yang berpotensi lebih berguna (misalnya, kebanyakan shell akan menunjukkan nomor baris dalam skrip), dan pesan kesalahan akan konsisten jika Anda menggunakan pengalihan sedapat mungkin untuk membuka file.
Dan masuk
sort < "$f1" > out
(bertentangan dengan sort -- "$f1" > out
), jika "$f1"
tidak dapat dibuka, out
tidak akan dibuat / terpotong dan sort
bahkan tidak dijalankan.
Untuk menghapus beberapa kebingungan yang mungkin terjadi (mengikuti komentar di bawah), itu tidak mencegah perintah mmap()
untuk memasukkan file atau lseek()
memasukkannya ke dalam file (tidak sort
juga melakukannya) asalkan file itu sendiri dapat dicari. Satu-satunya perbedaan adalah bahwa file dibuka sebelumnya dan pada deskriptor file 0 oleh shell sebagai lawan kemudian oleh perintah mungkin pada deskriptor file yang berbeda. Perintah masih dapat mencari / mmap fd 0 sesuka hati. Itu tidak menjadi bingung dengan di cat file | cmd
mana cmd
stdin kali ini adalah pipa yang tidak dapat dicari / dicari.