Làm thế nào để truyền biến cho HEREDOC trong bash?


15

Tôi muốn làm một cái gì đó như thế này:

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

$ cat test
My name is John

Có ý kiến ​​gì không?

Câu trả lời:


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

hoặc thậm chí

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

Đã làm cho tôi.

Trông giống như khi bạn đi ==endtrong 'biến không thay thế.

à, đây là trang nam (xem 3.6.6):

Định dạng của tài liệu ở đây là:

      <<[-]word
              here-document
      delimiter

Không có mở rộng tham số, thay thế lệnh, mở rộng số học hoặc mở rộng tên đường dẫn được thực hiện trên word . Nếu bất kỳ ký tự nào trong từ được trích dẫn, dấu phân cách là kết quả của việc loại bỏ trích dẫn trên từ và các dòng trong tài liệu ở đây không được mở rộng. Nếu từ không được trích dẫn, tất cả các dòng của tài liệu ở đây phải chịu sự mở rộng tham số, thay thế lệnh và mở rộng số học. [...]


Bạn cũng có thể sử dụng dấu ngoặc kép ( cat << "==end" > test), nhưng trích dẫn cứng ngăn chặn sự thay thế thực sự.
Mat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.