PowerShell 與 Bash 相比,哪個更好?


從理念上 ps 比 bash 先進一代,ps 有完整的、強類型的編程支持,bash 裡面全是字元串。

Powershell 裡面很多的函數比 UNIX 更加正交,如 %?,可以提供極其可怕的抽象能力,你 bash 就是做不到。

當然 ps 坑也是不少的,比如沒有自帶 wget……雖然可以用腳本實現。

以及 $outputencoding 默認是 US-ASCII,雖然也可以改。

以及最重要的,所有和 exe 互操作的流都視作字元串,導致一些程序,如 curl 無法使用。


如果你受夠了bash靠文本解析和環境變數來解決邏輯問題,你會無比渴望一個OO的Shell。——PS簡直是大救星。

隨著PS用多了,你會發現,PS的OO有些走火入魔,你又會開始懷念簡單粗暴的bash。


說PS的OOP理念比shell純字元串先進的同學請想一想:

JavaScript的對象字面量,是用字元串表示對象,這樣的一種技術為什麼大受歡迎?

答案是從使用者友好的角度看,字元串要優於對象,而命令行恰恰是人機交互界面,這就是為什麼shell比PS易用的原因,至於比較「理念」哪個先進,對於靠代碼吃飯的人來說就是扯淡。


bash 快,易用,提示好,難學。寫 script,看 script 的時候你想砸電腦。

ps 寫的 script 清晰,好讀,有一點編程基礎,就算幾乎沒學過 powershell 都能猜出來啥是幹嘛的,但是比較慢。。。

所以說平常交互的話 bash(bash-it, oh-my-git, oh-my-zsh)更好用一些,但是真正寫起 script 的時候感覺還是 powershell 爽。


忽略命令的話,Bash 快(機械盤日常使用),PS OOP 吊。

接下來扯命令。

Bash 的內置命令其實也算好用,不過沒啥特別的。剩下的命令若假設為 GNU 系列的話我個人覺得很好用。

PS 對 UNIX 類命令使用 alias 進行了支持,不過剩下的就是一個個坑了。另外這麼長的命令名/函數名不用 alias/Tab/ISE 看上去會把人逼死。參數這邊也是,POSIX 系的短選項疊加和長選項對我來說是很棒的東西…

Bash 的計算效能和 PS 沒有做過比較。PS 似乎有浮點運算,配上 .NET JIT 希望不慢吧。

話說 Bash 雖說沒有 OOP 沒有二維數組之類的,但是也總有人模擬。例如 json-bash(也許是 bash-json)這個庫,作者就很有良心地把函數名都變成了 json.xxxx 的樣子……


感覺這次微軟要翻身,ps比bash強太多太多了(我習慣用記事本和idea對比打比方),只不過由於沒有集成在linux系統中,一些比較簡單日常自動化行為用bash足以,但是真正寫過的人就知道bash的設計過於簡化,時代在發展,就像前端的模塊化的發展一樣,需要一種更加強大的自動化語言,powershell無疑就是bash的繼任者.當然功能強大背後就需要付出更多的努力來熟悉這門語言和相應的編程環境.至於理念,我覺得比bash最突出的就是ps可以返回對象而不僅僅是文本,然後你可以像在其他語言里一樣去訪問對象的屬性和方法,ps把命令行環境的編程與面向對象結合起來使得有編程基礎的人入門相當順手,與此帶來的是更加強大的功能.至於其他方面我也正在了解,有興趣的可以去了解一下這個網站(http://pstips.net),目前國內最好的ps網站了(ps都出來這麼多年了,中文資料卻這麼少,大環境真的是不行啊),另外微軟官方也有相應的技術文檔.ps未來肯定是要替代cmd.exe的,另外微軟開源了ps,linux也可以用.


PowerShell vs Bash


跟 IPython 比還差不多…


實在忍不住吐槽一下,ps在窗口中還是和cmd一樣不支持複製粘貼


肯定是GNU Bash好呀,畢竟Bash作為大量Linux發行版默認的Shell,久經考驗.軟粉再怎麼鼓吹PowerShell多麼多麼牛,也架不住事實就是大多數shell腳本,連一些Bash的高級功能都用不到,比如說Linux上的開源軟體的configure這個腳本,默認就是用/bin/sh,而Ubuntu上/bin/sh指向的是/bin/dash,而dash是一個輕量級的shell,bash支持的東西,dash不一定支持.Android這個Linux上也有一個/system/bin/sh,也是一個簡易版的shell,可以用來跑基本的shell腳本.

而對於其他複雜的CLI下的shell編程,完全可以用Python甚至PHP這種應用層的編程語言,比如說你覺得Bash的關聯數組不好用,那完全可以用PHP的關聯數組嘛.

附上Bash和PowerShell的對比表格:

http://hyperpolyglot.org/shell


推薦閱讀:

如何善加利用 Mac 下的 Terminal ?
DOS的常用命令都有哪些?如何應用?
為什麼命令行界面(CLI)並未隨著命令行操作系統(如 DOS)的淘汰而消亡?
有哪些高效但是不常見的CLI命令?

TAG:腳本語言 | Shell編程開發 | 命令行界面CLI | Bash | PowerShell |