文章摘要
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处理器设计背景等与主题关联性较弱的内容,保留了环境变量演变过程的核心脉络。
评论总结
以下是评论内容的总结:
关于早期计算机系统的混乱现象
- 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")
对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")
环境变量设计的批评
- 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")
对历史技术决策的反思
- J8K357R认为早期开发者的随意决策可能产生长期影响("a decision that... will stick around forever")
- Someone推测"TMP"的命名可能源于MS-DOS的三字符扩展名限制("file extensions... were 3 characters")
不同观点保持平衡,既有对历史技术的怀念(如CP/M的配置方式),也有对现有系统缺陷的批评(如环境变量设计),同时包含具体解决方案建议(前缀法、标准化路径等)。