쉘 변수 $_가 예기치 않게 작동합니다.

쉘 변수 $_가 예기치 않게 작동합니다.

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

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

답변1

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

따라서 실제로 표시되는 것은 행 수입니다 ./access.log.

Redirect( )는 명령이 시작되기 전에 쉘에 의해 수행되므로 >명령의 일부가 아닙니다 . 그래서 당신은 얻을 것이다 .headhead$_./access.log


에서 man bash:

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

관련 정보