Unix & Linux: How to escape quotes in shell?
The Question: I'm having trouble with escaping characters in bash. I'd like to escape single
and double quotes while running a command under a different user. For the
purposes of this question let's say I want to echo the following on the screen:
'single quote phrase' "double quote phrase"
How can I escape all the special chars, if I also need to switch to a different
user:
sudo su USER -c "echo \"'single quote phrase' \"double quote phrase\"\""
Of course, this doesn't produce the right result.
Solutions: Please watch the whole video to see all solutions, in order of how many people found them helpful
== This solution helped 112 people ==
You can use the following string literal syntax:
> echo $''single quote phrase' "double quote phrase"'
'single quote phrase' "double quote phrase"
**** From man bash ****
Words of the form $'string' are treated specially. The word expands
to string, with backslash-escaped characters replaced as specified by
the ANSI C standard. Backslash escape sequences, if present, are
decoded as follows:
a alert (bell)
b backspace
e
E an escape character
f form feed
n new line
r carriage return
t horizontal tab
v vertical tab
\ backslash
' single quote
" double quote
nnn the eight-bit character whose value is the octal value nnn (one
to three digits)
xHH the eight-bit character whose value is the hexadecimal value HH
(one or two hex digits)
cx a control-x character
== This solution helped 12 people ==
In a POSIX shell, assuming in your string there is no variable, command or
history expansion, and there is no newline, follow these basic prescriptions:
1. To quote a generic string with single quotes, perform the following
actions:
1. Substitute any sequence of non-single-quote characters with the
same sequence with added leading and trailing single quotes: 'aaa'
==> ''aaa''
2. Escape with a backslash every preexisting single quote character: '
==> '
In particular, ''aaa'' ==> ''aaa''
2. To quote a generic string with double quotes, perform the following
actions:
1. Add leading and trailing double quotes: aaa ==> "aaa"
2. Escape with a backslash every double quote character and every
backslash character: " ==> ", ==> \
A couple of examples:
''aaa""bbb''ccc\ddd'' ==> '''aaa""bbb''''ccc\ddd'''
==> "''aaa""bbb''ccc\\ddd''"
so that you example could be expanded with the following:
#!/bin/sh
echo ''aaa''' "bbb"'
echo "'aaa' "bbb""
sudo su enzotib -c 'echo ''''aaa''''''' "bbb"''
sudo su enzotib -c 'echo "'''aaa''' "bbb""'
sudo su enzotib -c "echo \''aaa'\'' "bbb"'"
sudo su enzotib -c "echo "'aaa' \"bbb\"""
== This solution helped 17 people ==
Simple example of escaping quotes in shell:
$ echo 'abc'''abc'
abc'abc
$ echo "abc"""abc"
abc"abc
It's done by finishing already opened one ('), placing escaped one ('), then
opening another one (').
Alternatively:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
It's done by finishing already opened one ('), placing quote in another quote
("'"), then opening another one (').
Related: [ Ссылка ] at stackoverflow SE
With thanks & praise to God, and with thanks to the many people who have made this project possible! | Content (except music & images) licensed under cc by-sa 3.0 | Music: [ Ссылка ] | Images: [ Ссылка ] & others | With thanks to user SiegeX ([ Ссылка ]), user m33lky ([ Ссылка ]), user kenorb ([ Ссылка ]), user enzotib ([ Ссылка ]), user don_crissti ([ Ссылка ]), and the Stack Exchange Network ([ Ссылка ]). Trademarks are property of their respective owners. Disclaimer: All information is provided "AS IS" without warranty of any kind. You are responsible for your own actions. Please contact me if anything is amiss at Roel D.OT VandePaar A.T gmail.com.
Ещё видео!