20

This question already has an answer here:

I recently saw a video where someone executed ^foo^bar in Bash. What is that combination for?

marked as duplicate by Guss, taliezin, Jeff Schaller, peterh, countermode Dec 19 '17 at 11:06

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

25

Bash calls this a quick substitution. It's in the "History Expansion" section of the Bash man page, under the "Event Designators" section (online manual):

^string1^string2^

Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to !!:s/string1/string2/

So ^foo^bar would run the previously executed command, but replace the first occurence of foo with bar.

Note that for s/old/new/, the bash man page says "The final delimiter is optional if it is the last character of the event line." This is why you can use ^foo^bar and aren't required to use ^foo^bar^.

(See this answer for a bunch of other designators, although I didn't mention this one there).

  • 1
    Really nice. Didn't know this exists. – PesaThe Dec 18 '17 at 21:20
15

^foo^bar executes that last command, replacing the first instance of foo with bar. For example:

$ ech "hello"
-bash: ech: command not found
$ ^ech^echo
echo "hello"
hello

Not the answer you're looking for? Browse other questions tagged or ask your own question.