이미 파일을 처리하는 명령으로 파일의 입력 리디렉션에 "

이미 파일을 처리하는 명령으로 파일의 입력 리디렉션에 "

정기적으로 다음 구문을 보았습니다.

awk 'stuff' <file
sort <file

문제는 나는 보통 다음과 같이 쓴다는 것입니다.

awk 'stuff' file
sort file

그리고 일이 완벽하게 작동합니다. 따라서 두 구문이 대략 동일하다면(또는 동일합니까?) 구문을 사용하면 어떤 이점이 있습니까 <file?

편집하다

기존 스레드는 내 질문 중 일부를 다루고 있습니다(사용은 <쉘이 파일을 여는 것을 의미함).첫 번째그리고그 다음에명령에 대한 표준 입력으로 전달하지만 일부는 남아 있다고 생각합니다.

  • POSIX 준수?
  • file논쟁 의 본질에 관한 모호함을 없애기 위한 것입니까 ?
  • 특정 유형의 쉘에만 해당됩니까?
  • 더 이상 사용되지 않는 것으로 간주됩니까?
  • 성능면에서 눈에 띄는 차이가 있습니까?
  • 하나를 다른 하나에 대해 사용하는 모든 예를 환영합니다.

답변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입력이 어디서 오는지 신경 쓰지 않습니다(오류 메시지에 파일 이름이 포함되어야 하지만 추가 변수에 걸릴 수 있는 경우 제외).

관련 정보