zsh 内置的 `r` 命令是做什么用的?

Dan*_*Dan 9 zsh

我不小心r在 shell 中输入了内容,结果似乎是我运行的最后一个命令的重复。

man zshbuiltins,无益地,这样

r- 一样fc -e -

的文档fc 几乎难以理解,但我设法梳理出这些引用:

  • fc [ -eename] [ -LI ] [ -mmatch] [old=new... ] [first[last] ]

  • 在包含这些历史事件的文件上调用编辑器程序ename ....当编辑完成时,将执行编辑的命令。

  • 如果ename-,则不会调用任何编辑器。

这对我来说就像 的行为r类似于感叹号!,因为它重播历史。确实,如果我setopt banghist重新打开 bang,诸如r man和 之类的! man东西似乎都会重播我对人类的最后一次召唤。

哪些异同r!?我可以使用的假设场景是r什么?

mpy*_*mpy 10

您从手册页中引用了正确的段落,做得很好。

zsh继承rksh,因为bashcsh都不知道这个命令。我想实现是为了尽可能与这三个主要 shell 兼容。

另一方面,历史 bang 机制!源自csh,可以使用setopt NO_BANG_HIST.

这两种机制之间的一个区别这使我想起的是,r!解析不同,因为!是保留字,但r只有一个(内置)命令。这意味着你可以写例如

$ echo my last command was !!
Run Code Online (Sandbox Code Playgroud)

它得到(取决于您按下SPACE或后的设置ENTER)到

$ echo my last command was man zshexpn
Run Code Online (Sandbox Code Playgroud)

r除非您$(r)当然使用命令替换,否则这是不可能的。

所以,我认为这一切都归结为个人喜好或习惯(如果您曾经使用过kshcsh)...