144 words
1 minute
Escaping strings in Bash using !:q
Anubhav Gain
2024-04-08

Escaping strings in Bash using !#

TIL this trick, via Pascal Hirsch on Twitter. Enter a line of Bash starting with a # comment, then run !:q on the next line to see what that would be with proper Bash escaping applied.

bash-3.2$ # This string 'has single' "and double" quotes and a $
bash-3.2$ !:q
'# This string '\''has single'\'' "and double" quotes and a $'
bash: # This string 'has single' "and double" quotes and a $: command not found

How does this work? James Coglan explains:

The ! character begins a history expansion; !string produces the last command beginning with string, and :q is a modifier that quotes the result; so I’m guessing this is equivalent to !string where string is "", so it produces the most recent command, just like !! does

A bunch more useful tips in the thread about this on Hacker News.

Escaping strings in Bash using !:q
https://mranv.pages.dev/posts/escaping-strings-in-bash-using-q/
Author
Anubhav Gain
Published at
2024-04-08
License
CC BY-NC-SA 4.0