!$和$_都可以返回上一个命令的最后一个参数(严格的说也不能说是参数,如果只有命令本身,那么返回的就是命令的名字),但是在存在管道命令和重定向命令的情况下存在差异

# echo hello world | awk '{print $1}'
hello
# echo !$
echo '{print $1}'
{print $1}
# echo hello world | awk '{print $1}'
hello
# echo $_

存在管道命令的情况下,!$输出的是管道命令中最后一个命令的最后一个参数,而$_则输出为空

# echo hello world > /tmp/hi.txt
# echo $_
world
# echo hello world > /tmp/hi.txt
# echo !$
echo /tmp/hi.txt
/tmp/hi.txt

存在重定向命令的情况下,!$输出的重定向命令后的最后一个参数,而$_则输出的是重定向之前的命令的最后一个参数。

其它不同

!$不会出现到命令历史记录中

转载请注明:知识蚂蚁 » shell中获取上个命令最后一个参数!$和$_的差异

我来说说

(便于我们更好的交流)

有不明白的地方欢迎留言哦~
取消