쉘 변수 $ _이 (가) 예상대로 작동하지 않습니다 이유는 무엇입니까? $ head -n 100000 ./access.log >

줄 수가 다른 이유는 무엇입니까?

$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424


답변

$_./access.log아닌 (마지막으로 실행 된 명령의 마지막 인수 )로 확장됩니다 ./data/log.sample.

그래서 당신은 실제로의 줄 수를보고 ./access.log있습니다.

리디렉션 ( >)은 명령이 시작 head되기 전에 셸에서 수행 되므로 명령의 일부가 아닙니다 head. 따라서 $_당신 과 함께 얻을 것이다 ./access.log.


보낸 사람 man bash:

($ _, 밑줄) 쉘 시작시 환경 또는 인수 목록에 전달 된대로 실행중인 쉘 또는 쉘 스크립트를 호출하는 데 사용되는 절대 경로 이름으로 설정하십시오. 결과적으로 확장이전 명령의 마지막 인수로 확장됩니다. 또한 실행되어 해당 명령으로 내 보낸 환경에 배치 된 각 명령을 호출하는 데 사용되는 전체 경로 이름으로 설정하십시오. 메일을 확인할 때이 매개 변수는 메일 파일의 이름을 보유합니다.