有任何 bash 魔法可以引用之前输入的参数吗?

有任何 bash 魔法可以引用之前输入的参数吗?

这个问题是一个变体之前问过 如何在 bash 控制台上重复当前输入的参数?


很多时候,我发现自己想在 shell 中稍微重命名一个文件名,例如:

$ mv test_1.py _test_1.py

或者

$ mv test_1.py test_1.py.org

我可以使用中的建议如何在 bash 控制台上重复当前输入的参数?, 但

有没有重击魔法这将允许我只引用之前输入的参数?

例如,如果魔法是$M,那么 - 对于上面的内容 - 我会使用:

$ mv test_1.py _$M.py
$ mv test_1.py $M.org

答案1

魔法分为两部分。

首先,echo 被别名为 e(如果您不需要别名,echo 也可以工作);其次,我们使用“大括号扩展”:

$ e mv {,_}test_1.py              # Try to see if it works as expected.
mv test_1.py _test_1.py

          # If the arguments are what you want:

$ mv {,_}test_1.py                # Press ↑ (up arrow), remove `e`

$ !*                              # OR: Type `!*` --> last line after arg 0.
$ mv {,_}test_1.py                # If `histverify` is set.

!* 可以用空格扩展,如果您启用魔法空间或者如果你shopt -s histverify按下回车键后,您将有机会在按下回车键(再次)执行之前查看历史扩展的效果。

另一个例子:

$ e mv test_1.py{,.org}
mv test_1.py test_1.py.org        # The result of the brace expansion.
                                  # Review it, and if it is ok:
$ !*                              # type !* (use either space or enter)
                                  # That will depend on how you setup it.

$ mv test_1.py{,.org}        # The command appear again (enter to execute).
$

还有历史扩展,!#这意味着到目前为止输入的命令行,并选择第一个命令:1。如果启用了 magic-space,则键入mv test1.py !#:1并按空格键,命令将更改:

$ mv test_1.py !#:1                # Press space.
$ mv test_1.py test_1.py           # The command line change to this.
$ mv test_1.py test_1.org          # Edit and press enter to execute.

相关内容