나는 종종 다음과 같은 구문을 본다:
awk 'stuff' <file
sort <file
문제는 제가 보통 이렇게 쓴다는 겁니다.
awk 'stuff' file
sort file
일이 잘 진행되고 있습니다. 그렇다면 두 구문이 대략 동일하다면(또는 동일합니까?) <file
구문을 사용하면 어떤 이점이 있습니까?
편집하다
내 문의 사항 중 일부를 다루는 기존 스레드가 있습니다( <
쉘을 사용하여 파일 열기첫 번째그리고그 다음에명령의 표준 입력으로 전달), 일부는 아직 남아 있는 것 같습니다.
- POSIX 준수?
file
논쟁의 성격에 대한 모호함을 제거하기 위한 것입니까?- 특정 유형의 쉘에만 해당됩니까?
- 더 이상 사용되지 않는 것으로 간주됩니까?
- 성능면에서 상당한 차이가 있나요?
- 하나를 다른 것과 비교하여 사용하는 모든 예를 환영합니다.
답변1
명령이 표준 입력(forms 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
하고 입력이 어디에서 왔는지 신경 쓰지 않습니다(오류 메시지에 파일 이름이 포함되어야 하지만 추가 변수에 삽입할 수 있는 경우는 제외).