^ 和 $ 何时以及为何具有“行开头”和“行结尾”的含义?

tem*_*def 6 history regular-expression

许多命令行工具(grepflex等)使用^符号来表示“行的开头”,使用$符号来表示“行的结尾”。这个约定是什么时候产生的?$出于这些目的保留两个字符似乎是完全合理的,但在现代键盘上,该符号位于该符号的左侧,这有点奇怪^

这是一个完全武断的决定吗?这是否来自一些较旧的键盘布局?使用此约定是否是因为某些较旧的工具决定以这种方式执行操作?

无论答案如何,是否有主要来源记录这一点?

Kus*_*nda 3

QED 编辑器于 1965 年为伯克利分时系统编写,用于$寻址文件中的最后一行,就像今天的edexvi一样vim。请参阅手册第 2-1 页。但最初的 QED 编辑器不允许使用正则表达式。

Ken Thompson 后来(“1960 年代末”)为 Multics 编写了 QED 版本,这是第一个实现正则表达式的编辑器。该编辑器对 Ken 1969 年的 Unix 开发产生了重大影响ed(后来由 Dennis Richie 于​​ 1971 年左右“定稿”)。Bill Joy 出于对 的不满ed,实施了exvi,这些是 1977 年 PDP-11 的第一个 BSD 版本的一部分。

and^表达式$以及后来成为 POSIX 正则表达式语法的大部分内容及其如今所具有的语义,均在 Ken 的 QED 版本中实现。请参阅手册第 4 页

目前尚不清楚这些特定符号的选择来自何处,但从$用于寻址最后一行的方式来看,它已经具有“最后”的含义。

在某些终端上,^无法生成该字符。\'因此允许使用Ken 的 QED 编辑器来代替^(参见贝尔实验室手册)。

  • 有关更多历史,不幸的是,到处都有神话,请参阅 https://unix.stackexchange.com/a/115995/5132 和 https://unix.stackexchange.com/a/332494/5132 。 (2认同)