Shell

為什麼是sort <'F1''pref錯誤的___over'sort--'F1'‘pr和F和rr和d這在和r‘s這r噸−−'f1' preferred over sort -- 'f1',為什麼這比 sort '$f1' 更受…

  • July 26, 2018

來自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 | cmdthis timecmd的 stdin 是不能被映射/查找的管道混淆。

引用自:https://unix.stackexchange.com/questions/458265