Tại sao lệnh md5sum <<< 'ddd'
(đầu ra d6d88f2e50080b9602da53dac1102762 -:) đúng, và md5sum << 'ddd'không?
Có <<<nghĩa là gì?
Tại sao lệnh md5sum <<< 'ddd'
(đầu ra d6d88f2e50080b9602da53dac1102762 -:) đúng, và md5sum << 'ddd'không?
Có <<<nghĩa là gì?
Câu trả lời:
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 <<ENDvà <<'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.
<<<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).
<<<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ò
rcvà zsh <<<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).
<<<đến từ cổng Unix rcvì nó không giống như Plan9 rccó nó.
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ọ.