Variabel shell $ _ tidak berlaku seperti yang diharapkan

11

Apa alasan perbedaan jumlah garis?

$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424
Mesin tenun
sumber
1
Kunjungi juga Parameter Khusus untuk pesta
Pandya
1
Dalam konteks interaktif, !$lakukan apa yang Anda inginkan, tetapi tidak akan berfungsi dalam skrip IIRC.
zwol
@ zwol: Ya. Aku bertanya pertanyaan tentang hal itu.
Loom
Anda harus menggunakan teeperintah dalam skrip Anda.
Diti

Jawaban:

26

$_berkembang ke ./access.log(argumen terakhir dari perintah yang dieksekusi terakhir), bukan ./data/log.sample.

Jadi, Anda sebenarnya melihat jumlah garis ./access.log.

Redirection ( >) bukan bagian dari headperintah seperti yang dilakukan oleh shell sebelum headperintah dimulai. Maka dari itu dengan $_Anda akan mendapatkan ./access.log.


Dari man bash:

($ _, sebuah garis bawah.) Pada startup shell, setel ke pathname absolut yang digunakan untuk memanggil shell atau skrip shell yang dieksekusi sebagaimana diteruskan dalam daftar lingkungan atau argumen. Selanjutnya, perluas argumen terakhir ke perintah sebelumnya , setelah ekspansi. Juga setel ke nama path lengkap yang digunakan untuk memanggil setiap perintah yang dieksekusi dan ditempatkan di lingkungan yang diekspor ke perintah itu. Saat memeriksa email, parameter ini menyimpan nama file email.

heemayl
sumber
1
@ J.Chomel Saya tidak yakin apa yang Anda anggap bug, bahkan bercanda.
chepner