![使用“](https://rvso.com/image/97241/%E4%BD%BF%E7%94%A8%E2%80%9C.png)
我經常看到以下語法:
awk 'stuff' <file
sort <file
問題是,我通常會這樣寫:
awk 'stuff' file
sort file
事情進展順利。因此,如果兩種語法大致相同(或者是嗎?),那麼使用<file
語法有什麼好處嗎?
編輯
現有的線程涵蓋了我的一些詢問(使用<
意味著外殼程式打開文件第一的和然後將其作為命令的標準輸入傳遞),但我覺得有些仍然存在:
- POSIX 合規性 ?
file
是為了消除關於論證性質的任何歧義嗎?- 它特定於某種類型的 shell 嗎?
- 它被視為已棄用嗎?
- 性能方面,有顯著差異嗎?
- 歡迎您使用其中一種來對抗另一種的任何示例。
答案1
如果命令支援從標準輸入(表單command <file
)或參數清單中的命名檔案讀取,則兩者都可以工作。甚至tcsh
支持command <file
,因此文法相當可移植;給定命令是否可以讀取參數列表(或標準輸入)中的檔案取決於該命令;ed(1)
例如從標準輸入讀取命令,因此無法從標準輸入讀取檔案。
在 C 級別,從標準輸入或命名檔案讀取的命令將執行類似的操作
#include <err.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fhandle;
// option processing here ...
if (argc == 0 || strncmp(*argv, "-", (size_t) 2) == 0) {
fhandle = stdin;
} else {
if ((fhandle = fopen(*argv, "r")) == NULL)
err(1, "could not open '%s'", *argv);
}
// read from fhandle here, which is either from stdin or a file ...
}
有些指令要求command -
表單指示從標準輸入讀取,其他指令會在參數清單為空時自動執行此操作(如上述程式碼)。否則,任何一種情況下的程式碼都會處理fhandle
,並且不關心輸入來自哪裡(除非錯誤訊息需要包含檔名,但可以將其插入附加變數中)。