使用“

使用“

我經常看到以下語法:

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,並且不關心輸入來自哪裡(除非錯誤訊息需要包含檔名,但可以將其插入附加變數中)。

相關內容