动态

详情 返回 返回

SH 和 BASH 有什麼不同 ? - 动态 详情

Difference Between SH and BASH

當談到 shell 腳本編寫時,經常出現兩個突出的 shell,Bourne shell (SH) 和 Bourne Again shell
(Bash)。兩者都是基於 unix 和 linux 的系統的組成部分,提供與操作系統交互的接口。本文旨在深入研究這兩種 shell 之間的複雜差異,揭示它們的獨特特徵,並提供比較分析,以幫助您瞭解何時以及為什麼使用其中一種。

SH 和 Bash 簡介

Bourne shell (SH) 是在 20 世紀 70 年代作為 Unix 的主要 shell 引入的。貝爾實驗室的 **Stephen
Bourne** 開發了它,因此得名。SH 以其簡單性和可移植性而聞名。當創建可能在各種 Unix 衍生產品上執行的腳本時,它是一個可靠的選擇。

Bourne Again shell (Bash) 它是原始 SH 的改進版本,由 Brian Fox 為 GNU 項目開發,作為 Bourne
Shell 的自由軟件替代品。Bash 是許多 Linux 發行版和 macOS 的默認 shell。它包含了 KornShell (ksh) 和 C shell (csh) 等其他 shell 的特性,提供了更健壯的功能和腳本功能。

SH 和 Bash 的主要區別

(1) Syntax Differences

與 SH 相比,Bash 提供了更多的簡寫和增強的腳本語法。例如:在 Bash 中,您可以使用雙方括號語法 [[ ]] 進行測試,它比 SH 中使用的單方括號語法 [ ] 更健壯和安全。

SH Syntax:

if [ $a -lt $b ]; then
    echo "$a is less than $b"
fi

Bash Syntax:

if [[ $a -lt $b ]]; then
    echo "$a is less than $b"
fi

(2) Array Variables

Bash 支持數組變量,而 SH 不支持。當您需要處理存儲在單個變量名稱下的多個值時,數組非常有用。

Bash Syntax:

array=("apple" "banana" "cherry")
echo ${array[1]}  # Outputs "banana"

(3) Command Line Editing

Bash 支持命令行編輯,而這在 SH 中不是標準的。在 Bash 中,您可以使用箭頭鍵導航命令歷史,使用退格鍵刪除文本,並使用製表符補全文件名和命令名。

(4) Shell Options

與 SH 相比,Bash 提供了額外的 shell 選項。例如:Bash 中的 shopt 命令提供了更改其他 shell 可選行為的能力,這在 SH 中是不可用的。

(5) Process Substitution

Bash 支持進程替換 (<(command) 和 >(command)),允許使用文件名引用進程的輸入或輸出。這個特性在 SH 中不可用。

Bash Syntax:

diff <(command1) <(command2)

(6) Command not found Hook

Bash 有一個特殊的 shell 函數 command_not_found_handle,當命令未找到時執行該句柄。這個特性在 SH 中不可用。

(7) Here Strings

Bash 支持“Here Strings”,I/O 重定向的一種形式,允許將字符串用作由 <<< 表示的命令的輸入,此功能在 SH 中不可用。

Bash Syntax

wc -l <<< "This is a string"

選擇 SH 還是 Bash

如果您正在創建一個需要在各種 Unix 系統上運行的腳本,由於其可移植性和兼容性,SH 可能是更好的選擇。但是,如果您在 Linux 或 macOS 系統上工作,並且需要額外的特性和語法增強,Bash 是首選 shell。

我的開源項目

酷瓜雲課堂-開源知識付費解決方案

  • course-tencent-cloud(酷瓜雲課堂 - gitee倉庫)
  • course-tencent-cloud(酷瓜雲課堂 - github倉庫)
user avatar youyudeshangpu_cny857 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.