Hacker News 中文摘要

RSS订阅

为什么同时存在TMP和TEMP环境变量?(2015) -- Why are there both TMP and TEMP environment variables? (2015)

文章摘要

TMP和TEMP环境变量同时存在源于历史兼容性考虑,两者功能相同,但不同程序可能使用不同变量。现代Windows系统中建议优先使用TEMP变量,但为兼容旧程序仍需保留TMP。

文章总结

为什么同时存在TMP和TEMP环境变量,哪个才是正确的?

本文探讨了Windows系统中同时存在TMP和TEMP两个环境变量的历史原因。

历史背景

  • 1973年CP/M系统:早期操作系统没有环境变量概念,程序通过修改可执行文件字节来配置临时文件位置
  • 1981年MS-DOS:引入了环境变量功能,但最初从CP/M移植的程序都不使用它们
  • 变量分化:随着原生MS-DOS程序出现,逐渐形成了TEMP和TMP两个临时文件路径变量

关键转折点

  • MS-DOS 2.0:引入管道功能时选择使用TEMP变量作为临时文件位置
  • 程序差异:DISKCOPY和EDIT等程序优先检查TEMP变量
  • Windows系统:GetTempFileName函数则优先检查TMP变量

现状

  • 两种变量至今共存于环境变量配置对话框中
  • 具体使用哪个变量取决于程序开发者选择
  • Windows程序通常使用GetTempFileName函数,因此更倾向于TMP变量

作者Raymond Chen用"Adidas与Puma之争"的比喻形容这两个变量的长期并存状态。

本文删减了关于CP/M系统配置细节、8086处理器设计背景等与主题关联性较弱的内容,保留了环境变量演变过程的核心脉络。

评论总结

以下是评论内容的总结:

  1. 关于早期计算机系统的混乱现象

    • Jedd提到1995年澳大利亚电信公司Telstra因Unix用户尝试编写.bat文件导致所有用户网络目录出现null文件("A *nix person had evidently had a go at writing a .bat file")
    • xg15认为应确保路径统一以避免混乱("Ensure they always point to the same path")
  2. 对CP/M系统配置方式的讨论

    • Semaphor对CP/M通过字节修补配置程序表示惊讶("Huh. That is interesting... I never heard of this")
    • QuantumNomad_认为这种方式比现代散落各处的配置文件更可取("would have liked that better... than the dotfiles")
    • fooqux和whobre质疑文章CP/M时间线的准确性,指出1973年微计算机尚未普及("this is crazy... 1973? Way too early")
  3. 环境变量设计的批评

    • shevy-java指出*nix环境变量存在潜在冲突("TZ is... timezone. So you should not define all variables"),并提出通过"MY"前缀规避问题("prefixing via MY... rarely run into problems")
    • NSPG911主张统一使用标准临时目录路径("always shove it to %LOCALAPPDATA%/Temp")
  4. 对历史技术决策的反思

    • J8K357R认为早期开发者的随意决策可能产生长期影响("a decision that... will stick around forever")
    • Someone推测"TMP"的命名可能源于MS-DOS的三字符扩展名限制("file extensions... were 3 characters")

不同观点保持平衡,既有对历史技术的怀念(如CP/M的配置方式),也有对现有系统缺陷的批评(如环境变量设计),同时包含具体解决方案建议(前缀法、标准化路径等)。