像zsh和bash这样的Shells有bang命令,这些命令以感叹号开头,然后扩展到用户历史记录中的项。
要获得运行的最后一个命令的最后一个参数,可以使用!$
。
$ echo one two three
$ echo !$ !$ !$
> three three three
在zsh中,可以交互地扩展这些bang命令:
touch foo bar
ls !$<TAB>
!$
将被扩展为内联foo
。
这是非常有用的,因为它经常防止我犯错误:我按tab
展开并确保我正确地展开它,而C-/
则在我自信的时候撤销扩展。
在bash中是否有一个设置来实现in命令的交互扩展?
子subshells和一般变量的扩展如何(即echo $(uname)<TAB>
到echo Linux
,echo $SHELL<TAB>
到echo /bin/bash
)。
发布于 2015-10-30 03:37:39
有几个选项可以用于历史扩展。一个是:p
修饰符,它打印扩展的命令,而不是执行它。
$ echo foo
$ !!:p
echo foo
另一种方法是使用histverify
选项,它将历史扩展的结果放入shell缓冲区进行编辑,而不是立即执行。
$ shopt -s histverify
$ echo foo
foo
$ !!
$ echo foo
如果您对该命令满意,只需再次单击Enter以执行它,就好像您刚刚键入了它一样。
默认情况下,Readline命令history-expand-line
绑定到M-^
(取决于终端模拟器作为元键发送的内容) (Alt-^
或Esc-^
),这将扩展当前命令行上的任何历史扩展。
还有一个通用的Readline命令shell-expand-line
(默认情况下绑定到M-C-e
),它扩展命令行上的所有内容,就像shell在按Enter之后,但在实际执行它之前一样。
https://stackoverflow.com/questions/33433420
复制相似问题