Как я могу использовать переменные в одинарных кавычках?
Мне просто интересно, как я могу Эхо переменной внутри одинарных кавычек (я использую одинарные кавычки, поскольку в строке есть кавычки).
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}
наиболее читаемый, функциональный способ использует фигурные скобки внутри двойных кавычек.
'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"
вы можете сделать это так:
$ 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