บรรทัดคำสั่ง: <<< แทน <<


63

เหตุใดคำสั่งmd5sum <<< 'ddd' (เอาต์พุต:) d6d88f2e50080b9602da53dac1102762 -ถูกต้องและmd5sum << 'ddd'ไม่ใช่

อะไร<<<หมายความว่าอย่างไร

คำตอบ:


45

<<<เริ่มต้นเป็น“ที่นี่สตริง”: สตริงจะขยายตัวและเลี้ยง stdin ของโปรแกรม (ในกรณีของคุณมีการขยายเกิดขึ้นไม่มาก) ซึ่งเทียบเท่ากับสิ่งนี้:

echo ddd | md5sum

ในทางกลับกัน<<เริ่มเอกสารที่นี่ บรรทัดต่อไปนี้ทั้งหมดที่มีเครื่องหมายระบุdddจะประกอบด้วยอินพุตของโปรแกรม (คุณควรใช้เครื่องหมายที่ไม่น่าจะปรากฏในข้อมูลของคุณ) คุณสามารถได้รับผลเช่นเดียวกับด้านบนดังนี้:

md5sum <<END
ddd
END

มีความแตกต่างหนึ่งอย่างระหว่าง<<ENDและ<<'END': หากไม่มีเครื่องหมายคำพูดตัวแปรใด ๆ ลำดับหนี ฯลฯ ในเอกสารที่นี่จะถูกขยายตามปกติ


3
อยู่ที่ไหนก็ไม่เทียบเท่าคือยกเว้นในrc, <<<(ชอบ<<) ใช้ไฟล์ชั่วคราวเพื่อให้สามารถใช้งานโดยคำสั่งที่lseekstdin ของพวกเขา
Stéphane Chazelas

32

<<<แนะนำสตริงที่นี่ : สตริงหลังจาก<<<ถูกส่งผ่านเป็นอินพุตไปยังคำสั่ง สิ่งนี้มีต้นกำเนิดในพอร์ตของ Byron Rakitzis ของrc(แผนที่ 9 shell) ไปยัง Unix และยังมีอยู่ใน zsh, ksh93 และ bash

<<แนะนำเอกสาร here : บรรทัดที่ตามมาของเชลล์สคริปต์จะถูกส่งผ่านเป็นอินพุตไปยังคำสั่งและสตริงหลังจาก<<นั้นเป็น terminator ที่นี่เอกสารทำงานในเชลล์สไตล์ Bourne ทั้งหมด (Bourne, POSIX, Ash, bash, ksh, zsh, …), เชลล์ C-style (csh, tcsh) และ Plan 9 shell (rc, es)


3
ไม่<<<ไม่ใช่kshส่วนขยายเส้นทางคือrc-> zsh-> ksh93-> bash( kshบันทึกย่อประจำรุ่นรับทราบเมื่อยืมคุณสมบัติจากzsh) <<ยังใช้งานได้ในrcเปลือกหอยสไตล์
Stéphane Chazelas

มีความแตกต่างระหว่างrcและzsh <<<แม้ว่าในนั้นrcจะไม่รวมอักขระบรรทัดใหม่ต่อท้ายและไม่ใช้ไฟล์ temp (ใช้ไพพ์และกระบวนการพิเศษที่ป้อนอย่างน้อยในพอร์ตไปยัง Linux)
Stéphane Chazelas

เพื่อให้แม่นยำยิ่งขึ้นดูเหมือนว่า<<<มาจากพอร์ต Unix rcเนื่องจากดูไม่เหมือน Plan9 ที่rcมี
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.