다른 질문에서 이 코드를 보았지만 답변에 대해 언급할 수 없어 여기에 질문합니다.
tr '\n' '\0' < file 1<> file
이 부분 에 관심이 있는데 1<>
, 본 적도 없고, 구글에서도 유용한 내용을 찾을 수 없습니다.
답변1
이것은 답변에 있습니다스티븐 체이저러스(Stephen Chazeras)가 썼다.. 이것은POSIX 쉘 기능이는 구체적이지 않습니다 bash
. 다른 리디렉션 연산자에 대한 설명과 함께 쉘 설명서에 언급되어 있습니다.
읽고 쓰기 위해 표준 출력인 파일 설명자 1을 열고 이를 1<>file
현재 디렉터리의 지정된 파일에 추가합니다.file
그 전에는 동일한 파일의 표준 입력을 추가했습니다.
tr
그런 다음 표준 입력에서 읽고 file
모든 개행 문자를 널 문자로 변경합니다. 출력은 tr
동일한 파일에 다시 기록됩니다.
tr
이 작업은 명령의 결과가 그 안에 있는 원본 데이터만큼 길면 작동합니다 file
.
결과가 tr
원본 파일보다 짧으면 파일 끝에 "이전 데이터"가 나타납니다.
$ cat file
too many @ here: @@@@
the end
$ tr -s '@' <file 1<>file
$ cat file
too many @ here: @
the end
nd
>
사용할 수 없으니 주의하세요
tr '\n' '\0' <file >file
왜냐하면 file
읽기 전에 잘리기 때문입니다(출력 파일은 자르지 않지만 아직 존재하지 않으면 생성됩니다).tr
1<>
그 사람도 못 >>
써요
tr '\n' '\0' <file >>file
이는 출력을 tr
파일 끝에 추가하고 이전 데이터는 그대로 유지하기 때문입니다.