bash:参考当前命令的先前参数

Lot*_*out 8 bash

例如,我想做以下事情:

mv xxxx xxxx.bak
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下代码:

mv xxxx{,.bak}
Run Code Online (Sandbox Code Playgroud)

我觉得这不是直接的.如果我能这样做会很棒:

mv xxxx $1.bak
Run Code Online (Sandbox Code Playgroud)

有时我们会像这样需要它:

echo xxxx yyyy $1.suffix
Run Code Online (Sandbox Code Playgroud)

我知道我们可以参考的参数以前使用命令":N",我可以代替参考的参数当前命令这样做?

顺便说一下,我想直接在shell中进行(交互式).谢谢.

che*_*ner 16

引用当前命令行!#.

mv xxxx !#:1.bak
Run Code Online (Sandbox Code Playgroud)

histverify如果您尚未使用该选项,我建议您启用该选项,这样您就有机会在实际执行之前校对或编辑历史记录扩展的结果.为此:

shopt -s histverify
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想启用该选项并且只想验证单个命令,请使用:p修饰符来打印扩展而不是执行它:

$ mv xxx !#:1:p.bak
mv xxx xxx.bak
$
Run Code Online (Sandbox Code Playgroud)