Jak przekazać zmienne do HEREDOC w bash?


15

Chcę zrobić coś takiego:

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

$ cat test
My name is John

Jakieś pomysły?

Odpowiedzi:


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

lub nawet

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

Pracował dla mnie.

Wygląda na to, jeśli wziąć ==endw 'zmiennej nie zastępuje.

ah, oto strona man (patrz 3.6.6):

Format dokumentów tutaj to:

      <<[-]word
              here-document
      delimiter

Na słowie nie jest wykonywana interpretacja parametrów, podstawianie poleceń, interpretacja arytmetyczna ani interpretacja nazw ścieżek . Jeśli cytowane są jakiekolwiek znaki w słowie , separator jest wynikiem usunięcia cudzysłowu w słowie, a wiersze w niniejszym dokumencie nie są rozwijane. Jeśli słowo nie jest cytowane, wszystkie wiersze dokumentu tutaj podlegają interpretacji parametrów, podstawianiu poleceń i interpretacji arytmetycznej. [...]


Możesz także użyć podwójnych cudzysłowów ( cat << "==end" > test), ale twarde cudzysłowy rzeczywiście uniemożliwiają podstawienie.
Mat
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.