shell 变量 $_ 的行为不符合预期

shell 变量 $_ 的行为不符合预期

行数不同的原因是什么?

$ 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 脚本的绝对路径名。随后,扩展到上一个命令的最后一个参数,扩展后。还设置为用于调用执行的每个命令并放置在导出到该命令的环境中的完整路径名。检查邮件时,该参数保存邮件文件的名称。

相关内容