Dòng lệnh: <<< thay vì <<


63

Tại sao lệnh md5sum <<< 'ddd' (đầu ra d6d88f2e50080b9602da53dac1102762 -:) đúng, và md5sum << 'ddd'không?

<<<nghĩa là gì?

Câu trả lời:


45

Các <<<khởi động một “ở đây chuỗi”: Chuỗi được mở rộng và làm thức ăn cho stdin của chương trình. (Trong trường hợp của bạn, không có nhiều sự mở rộng xảy ra.) Nó tương đương với điều này:

echo ddd | md5sum

Mặt khác, <<bắt đầu một tài liệu ở đây. Tất cả các dòng sau lên đến một dòng chứa điểm đánh dấu dddsẽ bao gồm đầu vào của chương trình. (Bạn nên sử dụng điểm đánh dấu không có khả năng xuất hiện trong dữ liệu của mình.) Bạn có thể đạt được hiệu ứng tương tự như trên như sau:

md5sum <<END
ddd
END

Có một sự khác biệt giữa <<END<<'END': Không có dấu ngoặc kép, bất kỳ biến nào, chuỗi thoát, v.v. trong tài liệu ở đây sẽ được mở rộng như bình thường.


3
Trường hợp không tương đương là ngoại trừ rc, <<<(như <<) sử dụng một tệp tạm thời để có thể được sử dụng bởi các lệnh mà lseekstdin của họ.
Stéphane Chazelas

32

<<<giới thiệu một chuỗi ở đây : chuỗi sau <<<được truyền làm đầu vào cho lệnh. Điều này bắt nguồn từ cảng của Byron Rakitzis rc(vỏ Plan 9) sang Unix và cũng có mặt trong zsh, ksh93 và bash.

<<giới thiệu một tài liệu ở đây : các dòng tiếp theo của tập lệnh shell được truyền làm đầu vào cho lệnh và chuỗi sau <<là dấu kết thúc. Tại đây, tài liệu hoạt động trong tất cả các vỏ kiểu Bourne (Bourne, POSIX, tro, bash, ksh, zsh, khắc), vỏ kiểu C (csh, tcsh) và vỏ Plan 9 (RC, es).


3
Không, <<<không phải là kshtiện ích mở rộng, đường dẫn là rc-> zsh-> ksh93-> bash( kshghi chú phát hành xác nhận cho một lần mượn tính năng này zsh). <<cũng hoạt động rctheo kiểu vỏ sò
Stéphane Chazelas

Có một sự khác biệt giữa rczsh <<<mặc dù trong đó rckhông bao gồm một ký tự dòng mới và không sử dụng tệp tạm thời (sử dụng một đường ống và một quy trình bổ sung cho nó ít nhất là trong cổng tới Linux).
Stéphane Chazelas

Nói chính xác hơn, có vẻ như nó <<<đến từ cổng Unix rcvì nó không giống như Plan9 rccó nó.
Stéphane Chazelas
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.