组合 ^foo^bar 在 Bash 中有什么作用?

man*_*tor 22 bash

我最近看到一个视频,有人^foo^bar用 Bash执行死刑。那个组合有什么用?

Mic*_*zek 26

Bash 将此称为快速替换。它位于 Bash 手册页的“历史扩展”部分,在“事件指示符”部分(在线手册)下:

^string1^string2^

快速替代。重复前面的命令,用 string2 替换 string1。相当于 !!:s/string1/string2/

所以^foo^bar会运行之前执行的命令,但用 替换第一次出现foobar

请注意,对于s/old/new/bash 手册页,“如果它是事件行的最后一个字符,则最终分隔符是可选的。” 这就是为什么您可以使用^foo^bar并且不需要使用^foo^bar^.

(请参阅此答案以了解其他一些指示符,尽管我没有在那里提及此指示符)。


Tim*_*iam 15

^foo^bar执行最后一个命令,替换的第一个实例foobar。例如:

$ ech "hello"
-bash: ech: command not found
$ ^ech^echo
echo "hello"
hello
Run Code Online (Sandbox Code Playgroud)