Bash在同一行中引用先前的参数

Rya*_*edy 7 bash zsh shortcut

我似乎记得bash在同一行中引用某些内容时有一个快捷方式.我经常知道和使用!$,!!和朋友.我记得阅读能够做如下的事情:

mkdir tmp && cd !_
Run Code Online (Sandbox Code Playgroud)

哪里!_代表我不记得的组合.(上述目标是成功创建一个目录并立即cd进入.)Google只会产生相同的2个参考表的重新发布,这些参考表没有这种组合.

现在我正在使用效率较低的

mkdir tmp
cd !$
Run Code Online (Sandbox Code Playgroud)

完成工作但不是我想要的方式.

有谁知道这个难以捉摸的捷径?

在这重要的情况下,我用zshoh-my-zsh,不香草bash.

mkl*_*nt0 7

mkdir tmp && cd "$_"
Run Code Online (Sandbox Code Playgroud)

我相信你正在寻找的东西(如果你确定不需要报价,你可以放弃双引号).

$_在不同的上下文中扩展不同,但在这里重要的是(来自man bash,v3.2.51):

扩展后扩展到上一个命令的最后一个参数.

背景:

注意:以下讨论bash,但似乎zsh原则上也适用.

$_是一个所谓的特殊参数,您可以$在以下Special Parameters部分列出其中(没有前缀)列出的参数man bash:

  • 在交互式shell和脚本中都可以使用.
  • 单个命令级别工作,而不是在行级别.

相比之下,!-prefixed令牌(例如!$回顾最近线的最后一个令牌)涉及壳的[指令]历史扩展(部分HISTORY EXPANSIONman bash):

  • 默认情况下,它们仅在交互式shell中工作,但可以使用set -o historyset -o histexpand(感谢@chepner)更改.
  • 在线级工作(更准确地说:通过一次Enter击键提交的所有内容,无论它包含多少个别命令或行).


che*_*ner 6

!# 是指到目前为止的命令行,您可以从中提取特定的单词:

mkdir tmp && cd !#:1
Run Code Online (Sandbox Code Playgroud)

相同的语法也适用zsh.