Bash,插入当前命令最后使用的参数

Bash,插入当前命令最后使用的参数

我知道您可以使用 调用上一个命令的最后一个参数,!$也可以使用 循环调用之前的参数,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 参考手册了解详情。您甚至可以将其与histverifyshell 选项结合起来,让您有机会在执行之前检查命令,这使您接近基于键盘交互式历史记录的完成。

历史扩展可以在任何地方使用;例如

lastechoargs="!echo:*"

将最后一个命令的所有参数存储echolastechoargs变量中。

这也适用于完整的命令;举例来说,您已经制定了一个复杂的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 加组合键。nn

该序列调用编号的命令,#在其前面添加注释,并将其作为最近的命令存储回 shell 历史记录中。然后^[_快捷方式调用最后一个命令中的最后一个参数。

bash默认情况下还会将最后一个参数保存在 shell 参数中$_,因此在完成第一部分之后,您也可以以这种方式扩展最后一个参数。

答案3

如果你的bash处于emacs模式,你可以使用Ctrl+ w(删除最后一个单词)然后Ctrl+ u(输入删除的字符串)

相关内容