Bash
刪除重定向運算符不會更改輸出。為什麼?
我在某處看到了這種重定向用法,並認為這是一個錯字:
grep root < /etc/passwd
但是在我執行它之後,我看到它給出了相同的輸出
grep root /etc/passwd
:$ grep root < /etc/passwd root:x:0:0:root:/root:/bin/bash $ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash
同樣的事情發生
cat < /etc/passwd cat /etc/passwd
但是,當與 一起使用時,重定向會被忽略
ls
:ls < /etc/passwd
不列印相同的輸出
ls /etc/passwd
怎麼了?
許多處理文件的實用程序將接受標準輸入(標準輸入)作為流輸入,或接受文件名作為參數。您的
< file
範例將文件的輸出重定向到實用程序。該文件由 shell 打開並通過stdin傳遞給您的實用程序..另一方面, with
cat file
,cat處理文件的打開和讀取,不涉及重定向。
ls
從不讀取文件,因此它不會將文件名作為參數以打開和讀取文件..(它接受文件名遮罩)…對於ls
,重定向操作實際上被忽略了,因為程序中沒有任何內容讀取外殼打開的文件…要確定任何實用程序的行為方式,只需
man utility-name
在終端中輸入… man是手動的縮寫… 例如。man cat
送你一份貓的手冊