embedded quotes
last updated: Oct 20, 2023
The best way to embed a quote in bash is to use the $'
syntax:
$ echo $'python -c "print(\'hello\')"'
python -c "print('hello')"
It lets you use C-style escapes, which otherwise don't work. An SO comment says:
Since Bash 2.04 syntax
$'string'
allows a limit set of escapes.
Since Bash 4.4,
$'string'
also allows the full set of C-style escapes, making the behavior differ slightly in$'string'
in previous versions. (Previously the$('string')
form could be used.)
an alternative
If that doesn't work for some reason is to end the string and start another one:
$ echo 'python -c "print('\''hello'\'')"'
python -c "print('hello')"
Here we have three strings, with an escaped quote between them. They are: 'python -c "print('
, then a quote, then 'hello'
, then a quote, then ')"'