144 words
1 minute
Escaping strings in Bash using !:q
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 withstring
, and:q
is a modifier that quotes the result; so I’m guessing this is equivalent to!string
wherestring
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/