답변:
이 스크립트는 두 파일에서 문자열 쌍을 읽습니다. 각 반복에서, 그것은에서 문자열 읽기 file11
로 lineA
하고,에서 file22
로를 lineB
. 파일이 끝날 때까지이 작업을 수행합니다. 루프의 본문은 두 개의 문자열과 빈 줄을 출력합니다.
<file11
수단은 "연결 /로부터 표준 입력 리디렉션 file11
"명령 "이되면이 명령으로" while
루프. 이것도 쓸 수있었습니다 0<file11
.
표준 입력은 파일 디스크립터 번호 0입니다. 파일 디스크립터 1 및 2는 표준 출력 및 표준 오류 스트림 용으로 예약되어 있습니다.
3<file22
수단 "에 연결 파일 기술자 3 file22
이 명령에 대한". 숫자 3은 다음 "무료"파일 디스크립터 번호이지만 코드는 4 또는 5 또는 0, 1 및 2 이외의 작은 정수를 대신 사용할 수 있습니다 (사용 가능한 파일 디스크립터 수의 한계는 쉘이 무엇인지에 따라 다릅니다) 사용되지만 최대 9 개까지 작동합니다.
루프에서 read lineA
기본적으로 표준 입력, 즉 파일에서 문자열을 읽습니다 file11
(표준 입력은 루프에서 상 속됨). 이것도 쓸 수있었습니다 read lineA <&0
.
으로 read lineB <&3
의 read
명령은 파일 기술자 3, 즉에서 읽 file22
(표준 입력이처럼 3 루프에서 사용할 파일 기술자)가 아닌 표준 입력.
즉, 표준 입력 스트림과 "추가"파일 설명자 (번호 3)를 사용하여 두 파일을 "동시"(각 파일에서 차례로 한 번에 한 문자열 씩) 읽습니다. 일반적으로 하나의 입력 스트림 에만 액세스 할 수 있지만 이는 명시 적으로 두 번째 입력 스트림을 작성하여 file22
파일에 연결하여 이러한 제한을 무시 합니다.
관련 :
"line"대신 "string"이라는 단어를 사용합니다. 두 파일에서 읽은 내용은 측면 공백이 제거되고 특정 이스케이프 시퀀스는 특별히 해석됩니다.
읽기하려면 선을 사용하여 read
, 사용을
IFS= read -r varname
관련 :
3<file22
과 같은 것 입니까? fopen
FID
fdopen()
있습니다. 예.