各自的定位和生态不一样。
windows系统的定位更大众,本来用cmd的时候就不多。
linux系统更多的是面向专业的IT工作者,他们想要的是一个更加精简,没有多余功能的操作系统。桌面可视化图形界面,他们几乎不需要,所以就使用命令多一些了。
这个是一个长久以来形成的习惯。近些年linux系统的界面也越来越好看,渐渐的走入大众视野,比如苹果系统也是基于linux的,但对于专业人士,还是会经常用命令行。
在这样的大环境下,windows的命令行的功能越来越少,变成了系统中的一个小辅助工具,而linux下面的命令越来越多,除去系统操作的命令,还有各种应用程序的使用命令。
所以这两个东西,本身就定位不一样,没有去比较的意义。
命令提示符太古老了,而且微软本身也没打算好好弄,就不说了。
PowerShell 和 UNIX Shell 在体验上的差别,感觉主要还是用户习惯造成的。PowerShell 出现得比较晚,用户对命令行的认识大多来自 UNIX Shell,而这两者在操作风格上完全不同,习惯了一个就会觉得另一个别扭。
比如说切换目录,在 UNIX Shell 上用的是 cd 命令,而在 PowerShell 上原生的命令是 Set-Location(可能还要加上 -Path),这么长的命令,用惯了 cd 的人一时半会儿接受不了。PowerShell 为了迁就 UNIX Shell 用户的习惯,默认采用了许多别名,Set-Location 的别名就是 cd(还有其他几个)。
在 Windows 上用命令行的机会本来就相对较少,有了这些兼容 UNIX Shell 语法的命令别名,用户认为似乎没必要专门去记 PowerShell 命令。再加上现在有了 WSL,直接在 Windows 上运行 bash,PowerShell 的应用场景进一步收缩了。
不见得 PowerShell 在设计上比 UNIX Shell 差,但是它的用户数量少也是有必然原因的。
1、两者在功能上几乎百是完全相同的。windows下ipconfig,linux下ifconfig,效果完全一样。区别一:linux的命令几乎可以完成系统下所有操作,功能非常强大,能非常大的提高操作效率。度区别二:windows下ipconfig,linux下ifconfig,效果完全一样。区别三:cmd的问外部命令不支持标准的输入输出,必须经过答文件中转。bash不会这样,一个是主力工具,一个只是照顾历史。
2、但是最根本区别是linux shell是个linux 操作系统的用户交互层。而windows下的cmd只是一个小应用。linux可以没有图形界面,cmd只是windos下的终端模拟器不能单独存在。inux下不需要图形桌面就可以做几乎任何事情,而且比图形桌面更简洁高效,配合shell编程实现自动化,比如笔者工作的服务器都是纯命令行,没有图形界面。
3、cmd本身只是个桌面应用,不能独立存在。cmd很蹩脚难用,功能有限,shell功能强大,体验极佳。
差在哪?差在软件生态啊。
拿操作系统为例的话,你用的不是操作系统,你用的是操作系统之上的各种app。一个操作系统之上有各种优秀的app,那么哪怕这个操作系统设计得很烂,优化得很差,也是会有很多人用的,至于它优化差的问题可以靠疯狂堆硬件解决,我说的自然就是____系统。
说回到命令行也是一样,用户使用的,其实不是命令行的shell本身,也不是终端仿真器程序,而是,大量的基于命令行的app,以及这些app之间的搭配。
大量的基于命令行的那些Linux app形成了肌肉记忆,旁人只道我在命令行运指如飞,可不知道要达到这种状态是经过了多长时间的历史积淀。而Linux命令行的应用生态,丰富得让你可以实现操作系统中需要做到的几乎所有事情。
Windows下,没有这成百上千的基于命令行的app,没有这些让人已经习惯成自然的app,没法使用就像吃饭喝水一般自然的这些命令行app,自然,Windows命令行就没办法好用:因为基于Windows命令行的软件生态太贫瘠了。
这,其实与PowerShell还是bash并没有什么直接关系。
–补充:有的人认为ps在设计理念上全方位超越bash。这句话粗看起来似乎有道理,然而,一个shell它首先是一个命令行,其次才是个批处理编程语言。使用更先进编程理念的shell从来就没能在普及层面战胜目前的shell,因为他们忽略了,手工输入的方便快捷才是shell的第一需求。