bash에서 HEREDOC에 변수를 전달하는 방법은 무엇입니까?


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'변수를 대체하지 않습니다.

아, 여기 맨 페이지에 있습니다 (3.6.6 참조).

여기 문서의 형식은 다음과 같습니다.

      <<[-]word
              here-document
      delimiter

word 에서 매개 변수 확장, 명령 대체, 산술 확장 또는 경로 이름 확장이 수행되지 않습니다 . 단어의 문자 가 따옴표로 묶이면 구분 기호 는 단어에서 따옴표를 제거한 결과이며 여기 문서의 줄은 확장되지 않습니다. 단어 를 인용 부호로 묶지 않으면 여기 문서의 모든 줄에 매개 변수 확장, 명령 대체 및 산술 확장이 적용됩니다. [...]


큰 따옴표 ( cat << "==end" > test)를 사용할 수도 있지만 하드 따옴표는 실제로 대체를 방지합니다.
Mat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.