使用“

使用“

我经常看到以下语法:

awk 'stuff' <file
sort <file

问题是,我通常这样写:

awk 'stuff' file
sort file

事情进展顺利。因此,如果两种语法大致相同(或者是吗?),那么使用<file语法有什么好处吗?

编辑

现有的线程涵盖了我的一些询问(使用<意味着 shell 打开文件第一的然后将其作为命令的标准输入传递),但我觉得有些仍然存在:

  • 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,并且不关心输入来自哪里(除非错误消息需要包含文件名,但可以将其插入附加变量中)。

相关内容