行数不同的原因是什么?
$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424
答案1
$_
正在扩展为./access.log
(最后执行的命令的最后一个参数),而不是./data/log.sample
。
所以你实际上看到的是 的行数./access.log
。
重定向 ( >
) 不是命令的一部分,因为它是在命令启动head
之前由 shell 完成的。head
因此,$_
你会得到./access.log
。
从man bash
:
($_,下划线。)在 shell 启动时,设置为用于调用在环境或参数列表中传递的 shell 或正在执行的 shell 脚本的绝对路径名。随后,扩展到上一个命令的最后一个参数,扩展后。还设置为用于调用执行的每个命令并放置在导出到该命令的环境中的完整路径名。检查邮件时,该参数保存邮件文件的名称。