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 中的一些主要區別。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP