Shell 变量 $_ 未按预期运行

Loo*_*oom 11 bash io-redirection

行数不同的原因是什么?

$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 26

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

所以你实际上看到了./access.log.

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


来自man bash

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