这个问题是一个变体之前问过 如何在 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.