쉘 변수 $ _이 (가) 예상대로 작동하지 않습니다


11

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

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

1
또한 bash
Pandya의

1
대화식 컨텍스트에서 !$원하는 것을 수행하지만 스크립트 IIRC에서는 작동하지 않습니다.
zwol

@zwol : 그렇습니다. 나는 그것에 대해 질문 했다.
Loom

tee스크립트 에서 명령을 사용해야합니다 .
Diti

답변:


26

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

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

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


보낸 사람 man bash:

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


1
@ J.Chomel 나는 당신이 농담으로 버그라고 생각하는 것이 확실하지 않습니다.
chepner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.