나는 이것이 다음과 같이 행동하는 것을 보았습니다.
[root@divinity test]# echo 0 > file.txt
[root@divinity test]# cat file.txt
0
[root@divinity test]# echo 0> file.txt
[root@divinity test]# cat file.txt
또한 포함하면 ""
예상대로 작동한다는 것도 확인했습니다.
[root@divinity test]# echo 0""> file.txt
[root@divinity test]# cat file.txt
0
나는 이것이 IO 리디렉션의 일부일 뿐이라고 생각하지만 echo 0>
무슨 일이 일어나고 있는지 잘 이해하지 못합니다.
답변1
in echo 0 > file.txt
(공백 포함)을 사용하면 > file.txt
쉘이 표준 출력을 리디렉션하여 표준 출력에 쓸 수 있도록 합니다 file.txt
(파일이 이미 있는 경우 파일을 자른 후). 나머지 명령은 echo 0
리디렉션이 적용된 상태로 실행됩니다.
언제리디렉션 연산자구분 기호 없이 따옴표가 없는 숫자로 접두사를 붙입니다.리디렉션은 해당 파일 설명자에 적용됩니다.기본값 대신. 0은 파일 설명자입니다.표준 입력, 따라서 0> file.txt
표준 입력을 file.txt
.(1은 표준 출력, 2는 표준 오류)로 리디렉션합니다. 이 숫자는 리디렉션 연산자의 일부로 간주되며 더 이상 명령 인수의 일부가 아닙니다 echo
.
매개변수에 더 많은 콘텐츠를 포함하면 이러한 현상이 더욱 명확하게 나타나는 것을 볼 수 있습니다 echo
.
$ echo number 0 > file.txt
$ echo number 0> file.txt
number
number
두 번째 경우에는 표준 출력이 리디렉션되지 않기 때문에 발생합니다.
이러한 리디렉션 연산자 변형은 표준 오류에서 더 일반적으로 나타납니다 2> file.txt
.
이런 방식으로 표준 입력을 리디렉션하면 표준 입력에서 읽으려는 실제 시도가 중단됩니다. 쓰기를 허용하면서 실제로 표준 입력을 리디렉션하려면 연산자를 사용하여 다음을 수행할 수 있습니다 <>
.
cat 0<> file.txt
답변2
파일 설명자 0은 입력 스트림입니다. 0>filename은 입력 스트림을 filename에 넣습니다. 0 > filename은 filename 파일에 0을 넣습니다. 간격에 주의하세요.