Як передати змінні в HEREDOC в bash?


16

Я хочу зробити щось подібне:

$ NAME=John
$ cat << '==end' > test
My name is $NAME
==end

$ cat test
My name is John

Будь-які ідеї?

Відповіді:


24
cat <<EOF > test
My name is $NAME
EOF

або навіть

cat <<==end > test
My name is $NAME
==end

Працювали для мене.

Схоже , коли ви берете ==endв 'змінної , не замінює.

ах, ось це на сторінці man (дивись 3.6.6):

Формат тут-документів:

      <<[-]word
              here-document
      delimiter

У слові не виконується розширення параметрів, підміна команд, арифметичне розширення або розширення імені . Якщо будь-які символи у слові цитуються, роздільник є результатом видалення лапки на слові, а рядки в документі тут не розширюються. Якщо слово не цитується, всі рядки документа тут піддаються розширенню параметрів, заміні команд та арифметичному розширенню. [...]


Ви також можете використовувати подвійні лапки ( cat << "==end" > test), але жорсткі цитати дійсно перешкоджають заміні.
Мат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.