Heredocs không thể được thụt vào như phần còn lại của tập lệnh (trừ khi bạn sử dụng -EOM
nhưng sau đó bạn chỉ có thể thụt lề bằng các tab). Xét cho cùng, mục đích của heredoc là cho phép bạn viết thứ gì đó sẽ xuất hiện như là. Điều này có nghĩa là EOM
không thể như thế này:
trong khi một cái gì đó;
làm
lệnh <<EOM
Xin chào!
EOM
xong
Thay vào đó, EOM
(hoặc bất kỳ dấu nào khác mà bạn sử dụng) cần phải là thứ duy nhất trên dòng, vì vậy không có khoảng trắng hoặc bất kỳ thứ gì khác trước hoặc sau nó. Như thế này:
trong khi một cái gì đó;
làm
lệnh <<EOM
Xin chào!
EOM
xong
Ngoài ra, lưu ý rằng vì những lý do đã đề cập ở trên, khoảng trắng hàng đầu cũng sẽ được đưa vào, do đó:
c=0;
trong khi [ $c -eq 0 ];
làm
con mèo <<EOM
Xin chào!
EOM
hãy để c ++
xong
Sẽ in:
$ foo.sh
Xin chào!
Trong khi điều này:
c=0;
trong khi [ $c -eq 0 ];
làm
con mèo <<EOM
Xin chào!
EOM
hãy để c ++
xong
Sẽ in:
$ foo.sh
Xin chào!
Cuối cùng, khi chạy tập lệnh của bạn, tôi gặp một lỗi khác:
$ foo.sh
Tôi hiện đang ở trong thư mục sau:
/nhà/terdon/foo
/home/terdon/scripts/foo.sh: dòng 108: cảnh báo: tài liệu tại đây ở dòng 84 được phân tách bằng phần cuối của tệp (muốn có `EOM')
/home/terdon/scripts/foo.sh: dòng 109: lỗi cú pháp: kết thúc tệp không mong muốn
Điều này là do tôi không cung cấp cùng một dữ liệu đầu vào và do bạn không kết thúc EOM đúng cách nên dữ liệu của bạn có thể đang được tập lệnh xử lý và đó là lý do tại sao bạn thấy một lỗi khác. Tôi hy vọng bản sửa lỗi của tôi sẽ loại bỏ nó, vì nó cho phép tôi chạy tập lệnh của bạn đến cuối trên máy của tôi.