POSIX 7
kennytm ยกมาman bash
แต่ส่วนใหญ่ก็เป็น POSIX 7: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07_04 :
ตัวดำเนินการเปลี่ยนเส้นทาง "<<" และ "<< -" ทั้งคู่อนุญาตการเปลี่ยนเส้นทางของบรรทัดที่มีอยู่ในไฟล์อินพุตเชลล์หรือที่เรียกว่า "here-document" ไปยังอินพุตของคำสั่ง
เอกสารที่นี่จะถือว่าเป็นคำเดียวที่เริ่มต้นหลังจากถัดไปและดำเนินต่อไปจนกว่าจะมีบรรทัดที่มีเพียงตัวคั่นและ a โดยไม่มีตัวอักษรอยู่ในระหว่าง จากนั้นเอกสารต่อไปนี้จะเริ่มขึ้นถ้ามี รูปแบบดังต่อไปนี้:
[n]<<word
here-document
delimiter
โดยที่ n ซึ่งเป็นทางเลือกแทนหมายเลขไฟล์ descriptor หากไม่ระบุหมายเลขเอกสารที่นี่จะอ้างถึงอินพุตมาตรฐาน (ตัวอธิบายไฟล์ 0)
หากมีการอ้างถึงอักขระในคำใด ๆ ตัวคั่นจะถูกสร้างโดยการลบเครื่องหมายคำพูดในบรรทัดและบรรทัดเอกสารที่นี่จะไม่ถูกขยาย มิฉะนั้นตัวคั่นจะเป็นคำของตัวเอง
หากไม่มีการอ้างถึงอักขระในคำพูดบรรทัดทั้งหมดของ here-document จะถูกขยายสำหรับการขยายพารามิเตอร์การแทนที่คำสั่งและการขยายเลขคณิต ในกรณีนี้อินพุทจะทำหน้าที่เป็นเครื่องหมายคำพูดคู่ด้านใน (ดูที่เครื่องหมายคำพูดคู่) อย่างไรก็ตามอักขระเครื่องหมายคำพูดคู่ ('' ') จะไม่ได้รับการปฏิบัติเป็นพิเศษภายในเอกสารที่นี่ยกเว้นเมื่อเครื่องหมายคำพูดคู่ปรากฏภายใน "$ ()", "` `" หรือ "$ {}"
หากสัญลักษณ์การเปลี่ยนเส้นทางคือ "<< -" <tab>
อักขระนำหน้าทั้งหมดจะต้องถูกแยกออกจากบรรทัดอินพุตและบรรทัดที่มีตัวคั่นต่อท้าย หากมีการระบุโอเปอเรเตอร์ "<<" หรือ "<< -" มากกว่าหนึ่งรายการในบรรทัดเอกสารที่นี่ที่เชื่อมโยงกับโอเปอเรเตอร์แรกจะถูกส่งเป็นครั้งแรกโดยแอปพลิเคชันและจะอ่านโดยเชลล์ก่อน
เมื่อเอกสารที่นี่ถูกอ่านจากอุปกรณ์ปลายทางและเชลล์เป็นแบบโต้ตอบมันจะเขียนเนื้อหาของตัวแปร PS2 ซึ่งถูกประมวลผลตามที่อธิบายไว้ใน Shell Variables ไปยังข้อผิดพลาดมาตรฐานก่อนที่จะอ่านแต่ละบรรทัดของอินพุตจนกระทั่งตัวคั่นได้รับการยอมรับ
ตัวอย่าง
ตัวอย่างบางส่วนยังไม่ได้รับ
คำพูดป้องกันการขยายพารามิเตอร์
ไม่มีคำพูด:
a=0
cat <<EOF
$a
EOF
เอาท์พุท:
0
ด้วยคำพูด:
a=0
cat <<'EOF'
$a
EOF
หรือ (น่าเกลียด แต่ถูกต้อง):
a=0
cat <<E"O"F
$a
EOF
ขาออก:
$a
ยัติภังค์เอาแท็บนำ
ไม่มียัติภังค์:
cat <<EOF
<tab>a
EOF
ที่<tab>
เป็นแท็บตัวอักษรและสามารถแทรกด้วยCtrl + V <tab>
เอาท์พุท:
<tab>a
ด้วยยัติภังค์:
cat <<-EOF
<tab>a
<tab>EOF
เอาท์พุท:
a
มีอยู่นี้แน่นอนเพื่อให้คุณสามารถเยื้องรหัสของคุณcat
โดยรอบซึ่งง่ายต่อการอ่านและบำรุงรักษา เช่น:
if true; then
cat <<-EOF
a
EOF
fi
ขออภัยนี่ใช้ไม่ได้กับอักขระช่องว่าง: POSIX การtab
เยื้องที่ชื่นชอบที่นี่ Yikes
cat
ที่อาจใช้ไร้ประโยชน์ ลองpsql ... << EOF ...
ดูด้วย "สายอักขระที่นี่" mywiki.wooledge.org/BashGuide/InputAndOutput?#Here_Strings