เหตุใดคำสั่งmd5sum <<< 'ddd'
(เอาต์พุต:) d6d88f2e50080b9602da53dac1102762 -ถูกต้องและmd5sum << 'ddd'ไม่ใช่
อะไร<<<หมายความว่าอย่างไร
เหตุใดคำสั่งmd5sum <<< 'ddd'
(เอาต์พุต:) d6d88f2e50080b9602da53dac1102762 -ถูกต้องและmd5sum << 'ddd'ไม่ใช่
อะไร<<<หมายความว่าอย่างไร
คำตอบ:
<<<เริ่มต้นเป็น“ที่นี่สตริง”: สตริงจะขยายตัวและเลี้ยง stdin ของโปรแกรม (ในกรณีของคุณมีการขยายเกิดขึ้นไม่มาก) ซึ่งเทียบเท่ากับสิ่งนี้:
echo ddd | md5sum
ในทางกลับกัน<<เริ่มเอกสารที่นี่ บรรทัดต่อไปนี้ทั้งหมดที่มีเครื่องหมายระบุdddจะประกอบด้วยอินพุตของโปรแกรม (คุณควรใช้เครื่องหมายที่ไม่น่าจะปรากฏในข้อมูลของคุณ) คุณสามารถได้รับผลเช่นเดียวกับด้านบนดังนี้:
md5sum <<END
ddd
END
มีความแตกต่างหนึ่งอย่างระหว่าง<<ENDและ<<'END': หากไม่มีเครื่องหมายคำพูดตัวแปรใด ๆ ลำดับหนี ฯลฯ ในเอกสารที่นี่จะถูกขยายตามปกติ
<<<แนะนำสตริงที่นี่ : สตริงหลังจาก<<<ถูกส่งผ่านเป็นอินพุตไปยังคำสั่ง สิ่งนี้มีต้นกำเนิดในพอร์ตของ 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)
<<<ไม่ใช่kshส่วนขยายเส้นทางคือrc-> zsh-> ksh93-> bash( kshบันทึกย่อประจำรุ่นรับทราบเมื่อยืมคุณสมบัติจากzsh) <<ยังใช้งานได้ในrcเปลือกหอยสไตล์
rcและzsh <<<แม้ว่าในนั้นrcจะไม่รวมอักขระบรรทัดใหม่ต่อท้ายและไม่ใช้ไฟล์ temp (ใช้ไพพ์และกระบวนการพิเศษที่ป้อนอย่างน้อยในพอร์ตไปยัง Linux)
<<<มาจากพอร์ต Unix rcเนื่องจากดูไม่เหมือน Plan9 ที่rcมี
rc,<<<(ชอบ<<) ใช้ไฟล์ชั่วคราวเพื่อให้สามารถใช้งานโดยคำสั่งที่lseekstdin ของพวกเขา