Linux 中 sh 和 Bash 的區別?


Bash 是 BourNeSh(Bourne Again ShEl)的縮寫,它是原始 Bourne shell 的改進版本。它用於在 Bash 程式語言中執行程式,通常被稱為 Linux 發行版的“預設 shell”。Sh 是 UNIX System V Release 4.0 的一個簡單的命令直譯器。Bash 和 sh 都可以用來編寫各種語言的指令碼,例如 Perl、Python、Ruby、PHP、Java、C++、JavaScript、Tcl、SQL 等。

sh

#!/bin/sh

bash

#!/bin/bash

注意

  • Shell 是終端使用者和作業系統之間的介面。

  • sh 實現 shell 命令列直譯器。

  • bash 是 sh 的超集。

Sh

Bash 也被稱為 Bourne shell。sh 是由 POSIX 標準描述的命令列 shell 程式。它可以在 Linux、Mac OS X 和基於 BSD Unix 的作業系統上執行。有許多不同的方法來實現它。在大多數作業系統(包括 Linux)上,sh 由稱為“shell”的程式實現,例如 bash、zsh 和 csh。Bash 是一個 shell 指令碼直譯器。/bin/sh 連結到其主要實現。符號連結是一個指向另一個檔案的檔案。

sh 本身不是一種計算機程式語言。sh 是 shell 程式語言的語法和語義的詳細規範。它不包含任何程式碼。sh 是大多數現代 Linux 發行版中內建的 shell。

我們可以使用 sh,因為它與多個作業系統相容。即使 bash 與 sh 不向後相容,Bash 指令碼通常也能正常工作,如果它們也是為 bash 編寫的。sh 是 POSIX/UNIX/LINUX 作業系統平臺上使用最廣泛的指令碼語言。sh 的一個好處是它存在於每個 Unix 系統上。

bash

Bash 也是一種類似於 sh 的命令程式語言。Bash 現在是基於 Linux 的作業系統上的預設使用者登入 shell。Bash 是 GNU 為 Bourne sh shell 提供的替代方案的 sh 命令列直譯器的擴充套件版本。

我們也可以說 bash 也是一種程式語言。我們可以在互動式會話中啟動 Python,它的行為就像命令列介面 (CLI),但我們也可以從任何文字編輯器中執行 Python 指令碼。

bash 是 sh 的超集。這意味著 bash 支援 sh 的功能並添加了其他功能。儘管大多數命令的工作方式與 sh 相同,但 bash 不是一個符合 POSix 的命令列直譯器。它是 POSIX 命令列介面的一個方言(一個子集)。Bash 可以在一個互動式終端中執行並允許使用者執行命令。它擁有 Bourne-Again SHell 系列語言中最好的功能集,包括檔案重定向、程序替換、環境變數擴充套件、歷史擴充套件、算術評估、命令分組等等。

像 GNU 軟體(例如提供其他 shell 的 GNU coreutils,包括 csh、Bourne Again SHell 的實現)一樣,Bourne Again SHell 是標準的 Unix shell。Bourne Again SHell 旨在與原始的 AT&T UNIX System V Release 4.0 BSD 作業系統相容。與其他 GNU 一樣,Bourne Again SHell 被開發為可在多個平臺上移植。這意味著它可以在執行相應作業系統的任何計算機上執行。

sh 和 bash 的區別

 bash sh
Bourne Again SHell SHell
#!/bin/bash #!/bin/sh
由 Brain Fox 開發 由 Stephen R. Bourne 開發
sh 的繼任者 bash 的前身
bash 是預設的 SHELL sh 不是預設的 SHELL
支援作業控制。 不支援作業控制。
bash 不是有效的 POSIX shell。 sh 是有效的 POSIX shell
Bash 指令碼是專門為 Bash 編寫的指令碼 Shell 指令碼是在任何 shell 中編寫的指令碼
支援命令歷史記錄。 不支援命令歷史記錄。

結論

在本教程中,我們看到了 sh 和 Bash 命令在 Linux 中的一些主要區別。

更新於: 2022-12-01

15K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.