Ubuntu 有一个 bash(Bourne Again SHell),而 Windows 有其专有的 shell。根据我的研究,Windows/Ubuntu 中用于 shell 脚本的语言没有名称。它只是称为 shell 脚本。
为什么 Windows 和 Ubuntu shell 能理解相同的命令,例如:ls
、、等等?mkdir
rmdir
mount
是否有某种用于 shell 脚本的通用语言?如果有,请提供更多详细信息。
答案1
Windowscmd.exe
不支持ls
、mount
等,除非您自己安装这些并将它们添加到%PATH%
(通过 Cygwin、MinGW、基于 Unix 的应用程序子系统 (SUA)或者是其他东西)。电源外壳确实如此。这是因为 Powershell 将这些命令作为标准 Powershell 命令的别名,以便 Unix 用户使用起来更舒服。请参阅Powershell 中的兼容性别名. Windows 确实有rmdir
,mkdir
, ETC。,但这些当然不支持在 Ubuntu 上找到的相同选项语法。
在 Ubuntu 中,这些与 Bash 无关。它们都是外部命令。此类实用程序有标准。POSIX是最值得注意的(见列表POSIX 强制要求的实用程序), 和Linux 标准库 (LSB)另一个对 Linux 系统很重要的东西(它主要基于 POSIX,但有一些补充)。Ubuntu 上的大多数都由GNU并且 GNU 实用程序通常具有比 POSIX 所需的基础更多的功能。
POSIX 还定义shell 语言你提到的(与cmd.exe
)它源自Bourne 外壳的语法。Bash(现在你知道了再次重逢所指),同样来自 GNU,也添加了功能,但在需要时可以以符合 POSIX 的方式运行。POSIX 语言正是您所期望的sh
。bash
, ksh
, ash
, dash
,zsh
全部使用那语言,并具有增强功能。csh
处于自己的(噩梦)世界中,并tcsh
具有增强功能csh
。
为了更深入地理解,可以回顾一下 Unix 的历史和类Unix系统。Unix 比 Windows 早出现十多年,这些实用程序最早出现在 Unix 中。
Windows 曾经是符合 POSIX 标准的,因为美国政府要求政府机构使用的操作系统必须符合 POSIX 标准(当时他们添加了Unix 服务 (SFU),由此产生了第一段中提到的SUA)。但该要求被废除,随后SUA也被取消。
有关的:
(请注意这些帖子的共同部分 - 它们都在Unix 和 Linux并标记历史- 您可能会发现浏览该标签非常有帮助。)
答案2
简单的:
Linux 是一个基于 UNIX 模型的系统,由 Dennis Ritchie 和 Ken Thompson 发明。
Windows/DOS 是 CP/M 系统的廉价仿制品,该系统在 20 世纪 70 年代流行于那些插在电视上的老式电脑上,而 CP/M 系统又是 20 世纪 60 年代末 / 70 年代初早期 UNIX 系统的廉价仿制品。