为什么将抑扬/插入符号用作Ctrl的符号?


18

我很早以前就开始使用Linux控制台,但是我从来没有问过自己关于抑扬号(^。)的字符()的问题。我想问一下为什么用它代替了这个词Ctrl

前几天,我在使用nano的时候就想到了这一点,我还搜索了互联网上是否有答案,但发现的只是关于“它是什么”和“它代表什么”的问题。

有历史原因吗?还是来自某种奇怪的约定?


2
即使是原始版本vi(至少在SunOS 3.5中也是这样),也使用脱字号/抑扬符来表示ctrl-C,ctrl-V等stty。另一方面,在那个时代,shell脚本是shell脚本^的同义词|,因此在stty调用时,您总是必须反斜号。好问题。
Bruce Ediger

1
如果我不得不猜测,我会说这可能与Shift,Control和Meta(以及鲜为人知的ilk(例如Super和Hyper))都是修饰键有关,是最常用的。因为大多数字符的Shifted版本都可以简单地键入(例如3/ #^,所以可以说是另一种“ shift”的直观缩写。对于大多数可打字的键/字符,Ctrl只是关闭了字符的64位这一事实可能与之有关- ^是的简写NOT (0x40)
DopeGhoti

Answers:


11

抑扬^符()等于电传打印机的向上箭头字符。到SunOS等问世时,这部分已经过去了10多年。在数学表达式中使用了相同的字符(替换),例如^用于幂(其他可能会使用**)。它也用于Pascal中以指示指针。

用于表示控制字符,此日期(至少)于1980年之前。例如,您可以在DEC文档中找到它(它在1970年代中期使用teco时肯定已在使用。1973年的实用程序手册(第927页))显示一个controlC例子。

在寻找合适的来源时,我找到了吉尔·史密斯(Gil Smith)的《电传打字机通信代码》,该代码足以在1960年代后期发布(表明其起源也是Unix之前的):

ASCII-63与当前ASCII-67版本基本相同。控制字符(上面的col-1)的定义在两个版本之间有所不同,如下所述。另外,在ASCII-63中,除了以下三个以外,未定义高32位(col-4):RUB(0x7F),ACK(0x7C)和ESC(0x7E)。在ASCII-63中对ALT-MODE字符(0x7D)的引用不一致。在1967年的版本中,RUB变为DEL并停留在相同的位置,但是ACK和ESC移入了控制字符区域(col-1)。在ASCII-67中,^替换了上箭头符号,_替换了左箭头

ASCII-63和ASCII-67是ASCII的常见变体,但似乎也有一些过渡版本:在Teletype Model 33手册中,引用了1965年版本的ASCII,其中SS代替了SUB。 (0x1A),\表示@(0x40),〜表示\(0x5C),用奇数字符代替| (0x7C),和| 表示〜(0x7E)。用于M33和M35机器的电传代码卡表示1966年的ASCII版本,尽管卡上显示的可打印字符在所有版本中均相同。

由于存在在不同的编码(例如ASCII和EBCDIC)之间交换文件的问题,在字符不再以ASCII格式存在很长时间之后,仍有打印机能够渲染向上箭头,因此这曾经是众所周知的。


1
0x5e是一个向上箭头,然后^还解释了为什么在原始Unix shell中将该字符用作管道运算符(传达了数据从一个命令流向另一个命令的想法)的原因。Bourne Shell仍然被视为^替代的管道运算符(我想与Thomson Shell向后兼容)。
斯特凡Chazelas

是的-uparrows太有用了,无法使用ASCII放弃。这也让我想起了一些更直接的键盘搭配,但是我没有发现任何图片可以说明。
Thomas Dickey

1
0x9(TAB)通常表示为^I,0x89 表示为M-^I,0xc9表示为M-I,0xe9表示为M-i。您现在是否曾经使用某些字符代替Meta来表示Meta M-
斯特凡Chazelas

并非一帆风顺:我对super / meta / hyper并没有太多的关注,因为当它们被引入时,它们仅适用于一些从未见过的终端。
Thomas Dickey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.