เหตุใดอักขระตัวพิมพ์ใหญ่ / ตัวอ่อนใช้เป็นสัญลักษณ์สำหรับ Ctrl?


18

ฉันเริ่มใช้คอนโซล Linux เมื่อนานมาแล้ว แต่ฉันไม่เคยถามตัวเองเกี่ยวกับคาแรคเตอร์อาคาเร็ต ( ^) Ctrlผมอยากจะถามว่าทำไมมันใช้แทนคำว่า

ฉันคิดถึงเรื่องนี้เมื่อวันก่อนขณะที่ฉันกำลังใช้นาโนและฉันก็ค้นหาเพื่อดูว่ามีคำตอบบางอย่างบนอินเทอร์เน็ตหรือไม่

มีเหตุผลทางประวัติศาสตร์บ้างไหม? หรือมันมาจากการประชุมที่แปลก ๆ


2
แม้แต่ต้นฉบับvi(อย่างน้อยที่สุดใน SunOS 3.5) ก็ใช้คาเร็ต / หมวกหน้าตัวอักษรเพื่อแสดงถึง ctrl-C, ctrl-V และอื่น ๆ ที่sttyทำเช่นนั้น ในทางกลับกัน^ทำงานเป็นคำพ้อง|ในเชลล์สคริปต์ในยุคนั้นดังนั้นคุณจะต้องแบ็กสแลชคาเร็ตด้วยsttyการเรียกใช้ คำถามที่ดี.
Bruce Ediger

1
ถ้าฉันต้องเดาฉันจะบอกว่ามันอาจมีบางอย่างเกี่ยวกับความจริงที่ว่า Shift, Control และ Meta (รวมถึงตระกูลที่รู้จักกันน้อยเช่น Super และ Hyper) เป็นคีย์ตัวปรับแต่งทั้งหมดซึ่ง Control อาจใช้บ่อยที่สุด เนื่องจากตัวละครส่วนใหญ่ 'เวอร์ชั่น Shifted สามารถพิมพ์ได้ง่าย (เช่น3/ #) ^อาจเป็นชวเลขที่เห็นได้ชัดเจนสำหรับ' shift 'ประเภทอื่นดังนั้นควรพูด ความจริงที่ว่าส่วนใหญ่ typable / คีย์ตัวอักษร Ctrl เพียงแค่จะปิด 64 บิตของตัวละครก็อาจจะเกี่ยวข้องกัน - เป็นชวเลข^ NOT (0x40)
DopeGhoti

คำตอบ:


11

The circumflex ( ^) นั้นถูกบรรจุไว้กับตัวอักษรลูกศรขึ้นบนเครื่องเคลื่อนย้ายมวลสาร ตามเวลาที่ SunOS และอื่น ๆ มาส่วนนี้เป็นมากกว่า 10 ปีในอดีต มีการใช้อักขระเดียวกัน (การแทนที่) ในนิพจน์ทางคณิตศาสตร์เช่น^สำหรับการใช้พลังงาน (ซึ่งบางอันอาจใช้**) มันยังใช้ใน Pascal เพื่อระบุตัวชี้

ใช้สำหรับระบุตัวควบคุมวันที่นี้ (อย่างน้อย) ก่อนปี 1980 คุณสามารถค้นหาได้ในเอกสาร DEC เช่น (มันใช้งานได้ในช่วงกลางทศวรรษ 1970 เมื่อฉันใช้ teco คู่มืออรรถประโยชน์จาก 1973 (หน้า 927) แสดงcontrolCตัวอย่าง

มองหาแหล่งข้อมูลที่เหมาะสมฉันพบรหัสการสื่อสารของ Teletypewriterโดยกิลสมิ ธ ซึ่งบอกว่าเพียงพอที่จะวางสิ่งนี้ในช่วงปลายทศวรรษ 1960 (แสดงให้เห็นว่าต้นกำเนิดนั้นเป็นระบบยูนิกซ์ล่วงหน้าเช่นกัน):

ASCII-63 ส่วนใหญ่เหมือนกับรุ่น ASCII-67 ปัจจุบัน คำจำกัดความของอักขระควบคุม (col-1 ด้านบน) มีการเปลี่ยนแปลงระหว่างสองเวอร์ชันดังที่กำหนดไว้ด้านล่าง นอกจากนี้ใน ASCII-63 ตำแหน่ง 32 บน (col-4) ไม่ได้ถูกกำหนดยกเว้นสาม: RUB (0x7F), ACK (0x7C) และ ESC (0x7E) มีการอ้างอิงที่ไม่สอดคล้องกับถ่าน ALT-MODE (0x7D) ใน ASCII-63 ในเวอร์ชัน 1967 RUB ได้กลายเป็น DEL และอยู่ในตำแหน่งเดียวกัน แต่ ACK และ ESC ได้ย้ายไปยังพื้นที่อักขระควบคุม (col-1) ใน ASCII-67, ^ แทนที่สัญลักษณ์ลูกศรขึ้นและ _ แทนที่ลูกศรซ้าย

ASCII-63 และ ASCII-67 เป็นตัวแปรทั่วไปของ ASCII แต่ดูเหมือนว่าจะมีบางรุ่นในช่วงเปลี่ยนผ่านเช่นกัน: ในคู่มือ Teletype Model 33 มีการอ้างอิงถึง ASCII รุ่นปี 1965 ที่มี SS แทนที่ SUB (0x1A), \ for @ (0x40), ~ สำหรับ \ (0x5C) อักขระแปลก ๆ แทนที่ | (0x7C) และ | สำหรับ ~ (0x7E) การ์ดรหัส Teletype สำหรับเครื่อง M33 และ M35 บ่งชี้ ASCII เวอร์ชัน 1966 แม้ว่าตัวอักษรที่พิมพ์ได้ที่แสดงบนการ์ดนั้นเหมือนกันในทุกรุ่น

สิ่งนี้เคยเป็นที่รู้จักกันดีเนื่องจากปัญหาของการแลกเปลี่ยนไฟล์ระหว่างการเข้ารหัสที่แตกต่างกันเช่น ASCII และ EBCDIC ซึ่งยังมีเครื่องพิมพ์ที่สามารถแสดงลูกศรขึ้นได้ตราบใดที่อักขระนั้นไม่มีอยู่ใน ASCII อีกต่อไป


1
0x5e เป็นลูกศรขึ้นก่อนที่จะ^อธิบายว่าเพราะเหตุใดอักขระนั้นจึงถูกใช้เป็นตัวดำเนินการไพพ์ในเชลล์ Unix ดั้งเดิม (ถ่ายทอดแนวคิดของข้อมูลที่ไหลจากคำสั่งหนึ่งไปยังอีกคำสั่งหนึ่ง) เชลล์ Bourne ยังคงใช้^เป็นตัวดำเนินการไพพ์สำรอง (ฉันคิดว่าสำหรับความเข้ากันได้แบบย้อนหลังกับเชลล์ทอมสัน)
Stéphane Chazelas

ใช่ - ช่องแคบมีประโยชน์เกินกว่าที่จะปล่อยวางกับ ASCII นี่ทำให้ฉันนึกถึงการผูกคีย์บอร์ดโดยตรงอีกด้วย แต่ฉันไม่พบภาพที่จะอธิบาย
Thomas Dickey

1
0x9 (TAB) มักจะแสดงเป็น^I, 0x89 เป็นM-^I, 0xc9 เป็นM-I, 0xe9 M-iเป็น ตอนนี้คุณใช้ตัวละครบางตัวที่เคยเป็นตัวแทนของ Meta M-หรือไม่?
Stéphane Chazelas

ไม่ใช่มือคนเดียว: ฉันไม่ได้สนใจซูเปอร์ / เมตา / ไฮเปอร์มากเพราะเมื่อพวกเขาได้รับการแนะนำพวกเขาใช้กับเทอร์มินัลเพียงไม่กี่แห่งที่ไม่เคยเห็นมาก่อน
Thomas Dickey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.