bash - 获取我正在通过历史记录编辑的当前命令的第一个参数,或类似的?

Bra*_*rks 5 bash history-expansion

我经常在 bash 提示符下编写命令,我想在其中获取以前的参数,在我输入的 CURRENT 行中,然后放在命令的其他位置。

一个简单的例子,如果我想重命名一个文件。我会

  • 输入mv命令
  • 输入我想移动的文件名, ~/myTestFileWithLongFilename.txt
  • 现在我只想更改我在第一个参数中提供的文件的扩展名,而无需再次输入。

我可以以某种方式使用历史记录或 bash 完成来自动完成第一个参数吗?

$ mv ~/myTestFileWithLongFilename.txt ~/myTestFileWithLongFilename.md
Run Code Online (Sandbox Code Playgroud)

我当然知道我可以执行不完整的命令,将其放入历史记录中,然后用 引用它!$,但是我的历史记录被无效命令污染,我想知道是否有更好的方法

Kus*_*nda 10

为了减少该mv命令所需的输入量,可以使用大括号扩展:

mv ~/myTestFileWithLongFilename.{txt,md}
Run Code Online (Sandbox Code Playgroud)

大括号扩展扩展为~/myTestFileWithLongFilename.txt后跟~/myTestFileWithLongFilename.md({txt,md}确保顺序正确很重要)。

bash无论您是在命令行还是在脚本中键入它们,大括号扩展都有效。

甲括号扩展,prefix{word1,word2,word3}suffix,将重复prefix和suffix串对于每个wordN在实际的支架中,产生三个独立的话prefixword1suffix,prefixword2suffix和prefixword3suffix。您还可以使用范围,例如{1..4}或{p..u}在括号扩展中。


Ark*_*zyk 9

这是可能的,但有点麻烦。在 bash 中!#是指已经输入的整行。您可以在 之后指定要引用的给定单词:,在本例中为!#:1。您可以使用shell-expand-line内置的 readline 键绑定 将它扩展到位Control- Alt- e。