我知道您可以使用 调用上一个命令的最后一个参数,!$
也可以使用 循环调用之前的参数,ALT + .
但是您能调用当前正在使用的命令使用的最后一个参数吗?
例如,
root@chip:/# echo peckahs
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# *_stuffthatdoesntmatter_*
root@chip:/# echo peckahs < used key shortcut to recall 'peckahs' the last used argument for echo
答案1
使用 bash 你几乎可以做你所要求的事情,如下所示:
echo !echo:$
所以当你这样做时
echo This is fun
ls
echo !echo:$
最后一行输出fun
.*
而不是$
生成匹配命令的所有参数;所以
echo This is fun
ls
echo !echo:*
This is fun
再次输出;但你不妨这样做
!echo
在这种情况下。
这不限于使用同一命令重复命令的参数:
printf !echo:*
看bash 参考手册了解详情。您甚至可以将其与histverify
shell 选项结合起来,让您有机会在执行之前检查命令,这使您接近基于键盘交互式历史记录的完成。
历史扩展可以在任何地方使用;例如
lastechoargs="!echo:*"
将最后一个命令的所有参数存储echo
在lastechoargs
变量中。
这也适用于完整的命令;举例来说,您已经制定了一个复杂的git
命令,并且想要将其保存在文件中:
echo !git > mygitcommand
或者您想要归档某些目录,但您决定先删除几个文件:
ls dir1 dir2
rm dir2/somefile
tar cpzf archive.tar.gz !ls:*
答案2
是的。在任何 POSIX shell 中您都可以执行以下操作...
set -o vi
^[[num]-#^[[num]_
...其中^[
代表ESC
键,代表从当前第一个命令向后计数的历史命令[num]
的可选参数,以及从最后一个命令向后计数的前一个命令中的第一个参数。根据您的键盘配置,您也许可以使用 CTRL 加组合键。n
n
该序列调用编号的命令,#
在其前面添加注释,并将其作为最近的命令存储回 shell 历史记录中。然后^[_
快捷方式调用最后一个命令中的最后一个参数。
bash
默认情况下还会将最后一个参数保存在 shell 参数中$_
,因此在完成第一部分之后,您也可以以这种方式扩展最后一个参数。
答案3
如果你的bash处于emacs模式,你可以使用Ctrl+ w(删除最后一个单词)然后Ctrl+ u(输入删除的字符串)