Answers:
!是一项功能,最初出现在C shell中,早在您可以依靠终端获得箭头键的那几天。如果将当前命令编号添加到提示(PS1="\!$ ")中,则特别有用,这样您可以快速查看屏幕以获取过去命令的编号。
既然您可以使用箭头键和类似的功能Ctrl-R来搜索命令历史记录,那么我对该功能的使用并不多。
您可能仍然发现它有用的一个变体是!!,它重新执行上一个命令。就其本身而言,我发现的!!Enter速度并不比快↑ Enter,但是将其组合成更大的命令时可能会有所帮助。
例如:一个共同的导频误差上sudo为基础的系统是忘记sudo上需要额外的特权的指令前缀。新手重新输入整个命令。勤奋的学生会从Shell的命令历史记录中编辑命令。开明的一种sudo !!。
Bash允许您!使用set +o histexpand或禁用Shell中的处理set +H。您可以使用在Zsh中禁用它set -K。
sudo,或其他东西),则可以这样做sudo !!。这可能比“ Up / Ctrl-A(或Home,如果您足够幸运的话)/ sudo / space / enter”快一点。YMMV。:)
echo 'Hi!'或echo "Hi!"或echo Hi\!。所有人都做同样的事情。
setopt NO_BANG_HIST在zsh中,可能比记住更有趣-K。
如果这里没有更长的答案,那么我最近就读过一个,因此超级用户肯定有一个答案。在bash手册页中,您可以找到有关此问题的标题为HISTORY EXPANSION的巨大部分。
您可以完成整个主机,而不仅仅是运行最后一个命令或命令号X。您可以执行诸如!cat运行以开头的最后一个命令的操作cat。或!?bash?:s/bash/csh/运行最后一个包含bash但用代替的命令csh。
!!:s/bash/csh/实际上运行最后一个命令,然后将bash替换为csh(如果存在)。不是最后一个包含bash的命令。那可能是!?bash?:s/bash/csh/或也许!?bash?:s/%/csh/
man页面,该功能还是难以理解。感谢您指出相关部分-这是实际文档中唯一可以充分说明这一点的地方。
当然,您可以!!重用bash shell中的最后一个命令。然后!$可以重用上一个命令的最后一部分。
例如查看一些文件
less path/to/your/file.txt
如果现在要编辑同一文件,则可以使用!$来从上一条命令中仅获取文件路径。
vim !$
$touch f1 f2然后$vim !$评估为$vim f2