Shell為什麼是
為什麼是sort <'F1''pref錯誤的___over'sort--'F1'‘pr和F和rr和d這在和r‘s這r噸−−'f1'
preferred over sort -- 'f1'
,為什麼這比 sort '$f1'
更受…
來自https://unix.stackexchange.com/a/458074/674
請記住
--
在將任意參數傳遞給命令時使用(或在可能的情況下使用重定向)。所以sort -- "$f1"
或更好sort < "$f1"
而不是sort "$f1"
.為什麼首選使用
--
和重定向?為什麼
sort < "$f1"
優先於sort -- "$f1"
?為什麼
sort -- "$f1"
優先於sort "$f1"
?謝謝。
sort "$f1"
$f1
對於以開頭-
或此處sort
開頭的值的值失敗+
(例如,可能對呼叫的文件產生嚴重後果-o/etc/passwd
)。sort -- "$f1"
(其中
--
表示選項結束)解決了大多數這些問題,但對於呼叫的文件仍然失敗-
(它sort
解釋為意味著它的標準輸入)。sort < "$f1"
不存在這些問題。
在這裡,它是打開文件的外殼。這也意味著如果文件無法打開,你還會得到一個可能更有用的錯誤消息(例如,大多數 shell 會在腳本中指示行號),如果你使用錯誤消息將是一致的盡可能重定向以打開文件。
而在
sort < "$f1" > out
(相反
sort -- "$f1" > out
),如果"$f1"
無法打開,out
將不會被創建/截斷,sort
甚至不會執行。為了消除一些可能的混淆(按照下面的評論),如果文件本身是可搜尋的,這不會阻止命令
mmap()
ing 文件或lseek()
在其中 ing (也不是)。sort
唯一的區別是文件是由 shell 更早地在文件描述符 0 上打開的,而不是稍後由命令可能在不同的文件描述符上打開的。該命令仍然可以隨意搜尋/映射該 fd 0。不要與cat file | cmd
this timecmd
的 stdin 是不能被映射/查找的管道混淆。