• Uncategorized

About string : How-do-I-use-variables-in-single-quoted-strings

Question Detail

I am just wondering how I can echo a variable inside single quotes (I am using single quotes as the string has quotation marks in it).
echo ‘test text “here_is_some_test_text_$counter” “output”‘ >> ${FILE}

any help would be greatly appreciated

Question Answer

Variables are expanded in double quoted strings, but not in single quoted strings:

$ name=World

$ echo “Hello $name”
Hello World

$ echo ‘Hello $name’
Hello $name

If you can simply switch quotes, do so.

If you prefer sticking with single quotes to avoid the additional escaping, you can instead mix and match quotes in the same argument:

$ echo ‘single quoted. ‘”Double quoted. “‘Single quoted again.’
single quoted. Double quoted. Single quoted again.

$ echo ‘”$name” has the value ‘”$name”
“$name” has the value World

Applied to your case:

echo ‘test text “here_is_some_test_text_'”$counter”‘” “output”‘ >> “$FILE”

……………………………………………………
use printf:

printf ‘test text “here_is_some_test_text_%s” “output”\n’ “$counter” >> ${FILE}

……………………………………………………
Use a heredoc:

cat << EOF >> ${FILE}
test text “here_is_some_test_text_$counter” “output”
EOF

……………………………………………………
The most readable, functional way uses curly braces inside double quotes.

‘test text “here_is_some_test_text_'”${counter}”‘” “output”‘ >> “${FILE}”

……………………………………………………
You can do it this way:

$ counter=1 eval echo `echo ‘test text \
“here_is_some_test_text_$counter” “output”‘ | \
sed -s ‘s/\”/\\\\”/g’` > file

cat file
test text “here_is_some_test_text_1” “output”

Explanation:
Eval command will process a string as command, so after the correct amount of escaping it will produce the desired result.

It says execute the following string as command:

‘echo test text \”here_is_some_test_text_$counter\” \”output\”‘

Command again in one line:

counter=1 eval echo `echo ‘test text “here_is_some_test_text_$counter” “output”‘ | sed -s ‘s/\”/\\\\”/g’` > file

……………………………………………………
Output a variable wrapped with single quotes:

printf “‘”‘Hello %s'”‘” world

……………………………………………………
with a subshell:

var=’hello’ echo ‘blah_’`echo $var`’ blah blah’;

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.