$ cd /tmp
$ echo bar > foo
$ cat foo
bar
$ cat foo | sed 's/bar/qux/'
qux
$ cat foo | sed 's/bar/qux/' > foo
$ cat foo
마지막으로 cat foo
파일 내용이 삭제되었음을 표시합니다. 왜 그런 겁니까?
답변1
I/O 리디렉션은 > foo
명령을 실행하기 전에 셸에서 처리됩니다. 쉘은 foo
쓰기 위해 파일을 열고 이전 내용을 지운 다음 명령을 실행합니다. 귀하의 경우에는 cat foo | sed 's/bar/qux/'
빈 파일이 사용되므로 foo
아무런 효과가 없습니다.