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 ddd
sẽ 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
và <<'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à ksh
tiện ích mở rộng, đường dẫn là rc
-> zsh
-> ksh93
-> bash
( ksh
ghi 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 rc
theo kiểu vỏ sò
rc
và zsh
<<<
mặc dù trong đó rc
khô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 rc
vì nó không giống như Plan9 rc
có 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àlseek
stdin của họ.