![쉘 변수 $_가 예기치 않게 작동합니다.](https://linux55.com/image/86105/%EC%89%98%20%EB%B3%80%EC%88%98%20%24_%EA%B0%80%20%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EA%B2%8C%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
행 수가 다른 이유는 무엇입니까?
$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424
답변1
$_
./access.log
대신 (마지막으로 실행된 명령의 마지막 인수) 로 확장됩니다 ./data/log.sample
.
따라서 실제로 표시되는 것은 행 수입니다 ./access.log
.
Redirect( )는 명령이 시작되기 전에 쉘에 의해 수행되므로 >
명령의 일부가 아닙니다 . 그래서 당신은 얻을 것이다 .head
head
$_
./access.log
에서 man bash
:
($_, 밑줄.) 쉘이 시작될 때 환경 또는 인수 목록에 전달된 쉘을 호출하는 데 사용되는 절대 경로 이름 또는 실행 중인 쉘 스크립트로 설정하십시오. 그후,이전 명령의 마지막 인수로 확장됩니다., 확장 후. 또한 실행된 각 명령을 호출하고 해당 명령으로 내보낸 환경에 배치하는 데 사용되는 전체 경로 이름으로 설정됩니다. 메일을 확인할 때 이 매개변수는 메일 파일의 이름을 보유합니다.