In a (ba)sh script of mine, I have, for example:
MYVAR=\'Alice says: \"Hello, Bob.\" But Bob isn\'t listening.\'
This is a syntax error, since
A non-POSIX solution which is supported in bash, at least, is the following:
MYVAR=$'Alice says: "Hello, Bob." But Bob isn\'t listening.'
The $
causes escape processing.
Using a HEREDOC is a good way to deal with this:
read MYVAR << \EOF
Alice says: "Hello, Bob." But Bob isn't listening.
EOF
You could also use double quotes and escaping. I guess, it is simpler than change the language:
MYVAR="Alice says: \"Hello, Bob.\" But Bob isn't listening."
More information about escaping symbols in bash.
No, you can't embed a single quote inside a single quoted string in Bash (or korn shell). It is a feature of the language you have chosen. Inside single quotes there are no special characters, and that includes \
.
This is a variation on one of your solutions, and it is ugly:
echo 'Alice says: "Hello, Bob." But Bob isn'\''t listening.'
gives:
Alice says: "Hello, Bob." But Bob isn't listening.
Alternatively use a different language, like Perl or Python.
I'm not sure why switching to $'...'
is an option but switching to double quotes is not (presumably to prevent some sort of parameter expansion). But you don't need to double quote the entire string:
MYVAR='Alice says: "Hello, Bob." But Bob '"isn't"' listening.'