シェル変数$ _が期待どおりに動作しない


11

行数が異なる理由は何ですか?

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

1
bashの特別なパラメータもご覧ください
Pandya

1
インタラクティブなコンテキストで!$は、必要なことを行いますが、スクリプトIIRCでは機能しません。
zwol 2016年

@zwol:はい。私は尋ねた質問それについてを。
2016年

teeスクリプトでコマンドを使用する必要があります。
Diti

回答:


26

$_拡大している./access.log、(最後に実行したコマンドの最後の引数)ではありません./data/log.sample

したがって、実際にはの行数が表示されています./access.log

リダイレクト(>)はheadheadコマンドが開始される前にシェルによって行われるため、コマンドの一部ではありません。したがって、$_あなたは得るでしょう./access.log


からman bash

($ _、アンダースコア。)シェルの起動時に、実行中のシェルまたはシェルスクリプトを呼び出すために使用される絶対パス名を、環境または引数リストで渡されたとおりに設定します。続いて、展開に、前のコマンドの最後の引数に展開します。また、そのコマンドにエクスポートされた環境で実行および配置された各コマンドを呼び出すために使用される絶対パス名に設定します。メールをチェックするとき、このパラメーターはメールファイルの名前を保持します。


1
@ J.Chomel冗談かもしれませんが、バグとはどういうものかわかりません。
chepner 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.