Shell变量$ _行为异常


11

行数不同的原因是什么?

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

1
另请访问bash的特殊参数
Pandya

1
在交互式上下文中,可以!$执行您想要的操作,但是在IIRC脚本中无法使用。
zwol

@zwol:是的。我问了一个问题
织布机

您应该tee在脚本中使用该命令。
Diti

Answers:


26

$_扩展到./access.log(最后执行的命令的最后一个参数),而不是./data/log.sample

因此,您实际上正在看到的行数./access.log

重定向(>)不是head命令的一部分,因为它head甚至在命令启动之前就由外壳程序完成。因此,有了$_你就会得到./access.log


来自man bash

($ _,下划线。)在shell启动时,设置为用于调用在环境或参数列表中传递的正在执行的shell或shell脚本的绝对路径名。随后,在扩展后,扩展到上一个命令的最后一个参数。还设置为用于调用每个执行的命令的完整路径名,并将其放置在导出到该命令的环境中。检查邮件时,此参数保存邮件文件的名称。


1
@ J.Chomel我不确定你认为是个错误,即使开玩笑。
chepner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.