原来这就是Windows使用"\"而不是"/"作为路径分隔符的原因啊,终于解了一个心结……

2012-03-19 20:40:13 +08:00
 xell
自从频繁地跨平台工作和开发以来,一直对 Windows 系统使用 \ 来作为路径分隔符,使用 / 来作为参数分隔符(dir /W c:\temp,请比较例如 ls -l /tmp)感到不可理解。今天看到了 HN 的讨论 Why is the DOS path character "\"?[1],才恍然大悟。

简而言之,历史进程是这样的:

* DOS 2.0 之前,编写命令行工具的程序员来自 IBM 背景,使用 DEC 系统,那里用 / 作为参数分隔符。而当时的 DOS 连多层目录都不支持(真的不支持……),因此不觉得与 *nix 的 \ 有什么冲突。

* DOS 2.0 及之后,需要支持多层目录了,那么既然 / 已经用做参数分隔符了,于是多方比较之下,最凑手又合情合理的方案就是使用 \ 来分割路径了。就是这样。

想吐槽的是,这种历史惯性(其他领域也有大量实例)真是让后人为难,并硬生生地制造了无穷无尽的后续问题。写跨平台脚本的童鞋一定都有同感,按下不表了。

[1] 文中和跟贴中还有一些有趣的事情:

* 话说 \ 这个字符在英语中原本是没有的,因此它是被生造出来的,这是咋回事?原来,Bob Bemer 当年发明这个符号,是为了能够与 / 合用,在 ALGOL 语言中打出逻辑和以及逻辑或符号 /\ 和 \/ 。哈哈。

* DOS 暗地里也支持在不致混淆的情形中使用 / 作为路径分隔符,并且 config.sys 中竟然还有一个选项 SWITCHAR= 可以指定自定义的参数分隔符,如果令 SWITCHAR=- ,那么 DOS 就和 *nix 兼容了。(不仅回忆起当年设置 config.sys 来获取扩展内存的时光……)

[1]: http://blogs.msdn.com/b/larryosterman/archive/2005/06/24/432386.aspx
7153 次点击
所在节点    分享发现
12 条回复
bayuwei2010
2012-03-19 20:52:15 +08:00
学习了...
loading
2012-03-19 21:06:32 +08:00
学习了
shiweifu
2012-03-19 21:08:28 +08:00
学习了
airyland
2012-03-19 21:21:04 +08:00
原来如此
liyucai
2012-03-19 21:26:54 +08:00
学习了...
Digi
2012-03-19 21:36:21 +08:00
一直以为是微软故意反其道而行之
jkeylu
2012-03-19 21:41:09 +08:00
原来酱紫啊
lianghai
2012-03-19 21:43:49 +08:00
所以……问题的根源在于 DEC 和 *nix 当初选择了不同的参数分隔符?……
hemingway
2012-03-19 22:03:07 +08:00
学习了,遗留系统确实会给后续更新造成麻烦
clowwindy
2012-03-19 22:09:43 +08:00
dir "c:/windows" /w

加引号就可以了
lldong
2012-03-19 22:30:56 +08:00
谢谢分享
jy00566722
2012-03-19 22:33:40 +08:00
有意思啊,哈哈哈,妈的个C的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/30063

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX