Как я могу использовать переменные в одинарных кавычках?

Мне просто интересно, как я могу Эхо переменной внутри одинарных кавычек (я использую одинарные кавычки, поскольку в строке есть кавычки).

     echo 'test text "here_is_some_test_text_$counter" "output"' >> ${FILE}

любая помощь была бы очень признательна

7 ответов


переменные расширяются в строках с двойными кавычками, но не в строках с одиночными кавычками:

 $ name=World

 $ echo "Hello $name"
 Hello World

 $ echo 'Hello $name'
 Hello $name

Если вы можете просто переключать кавычки, сделайте это.

Если вы предпочитаете придерживаться одинарных кавычек, чтобы избежать дополнительного экранирования, вы можете вместо этого смешивать и сопоставлять кавычки в одном аргументе:

 $ 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

применительно к вашему случаю:

 echo 'test text "here_is_some_test_text_'"$counter"'" "output"' >> "$FILE"

использовать функции printf:

printf 'test text "here_is_some_test_text_%s" "output"\n' "$counter" >> ${FILE}

используйте heredoc:

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

наиболее читаемый, функциональный способ использует фигурные скобки внутри двойных кавычек.

'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"

С подуровня:

var='hello' echo 'blah_'`echo $var`' blah blah';

вы можете сделать это так:

$ 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"

объяснение: Команда Eval будет обрабатывать строку как команду, поэтому после правильного количества экранирования она даст желаемый результат.

Он говорит, что выполните следующую строку как команду:

'echo test text \"here_is_some_test_text_$counter\" \"output\"'

команда снова в одной строке:

counter=1 eval echo `echo 'test text "here_is_some_test_text_$counter" "output"' | sed -s 's/\"/\\"/g'` > file

выведите переменную, обернутую одинарными кавычками:

printf "'"'Hello %s'"'" world