當前位置:編程學習大全網 - 編程語言 - Ubuntu系統下bash和dash的區別

Ubuntu系統下bash和dash的區別

inux 操作系統缺省的 shell 是Bourne Again shell,它是 Bourne shell 的擴展,簡稱 Bash,與 Bourne shell 完全向後兼容,並且在Bourne shell 的基礎上增加、增強了很多特性。

GNU/Linux 操作系統中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符號鏈接,但鑒於 bash 過於復雜,有人把 ash 從 NetBSD 移植到 Linux 並更名為 dash (Debian Almquist Shell),並建議將 /bin/sh 指向它,以獲得更快的腳本執行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX標準。

Debian和Ubuntu中,/bin/sh默認已經指向dash,這是壹個不同於bash的shell,它主要是為了執行腳本而出現,而不是交互,它速度更快,但功能相比bash要少很多,語法嚴格遵守POSIX標準。

語法上的主要的區別有:

1.定義函數

bash: function在bash中為關鍵字

dash: dash中沒有function這個關鍵字

2.select var in list; do command; done

bash:支持

dash:不支持, 替代方法:采用while+read+case來實現

3. echo {0..10}

bash:支持{n..m}展開

dash:不支持,替代方法, 采用seq外部命令

4. here string

bash:支持here string

dash:不支持, 替代方法:可采用here documents

5. >&word重定向標準輸出和標準錯誤

bash: 當word為非數字時,>&word變成重定向標準錯誤和標準輸出到文件word

dash: >&word, word不支持非數字, 替代方法: >word 2>&1; 常見用法 >/dev/null 2>&1

6. 數組

bash: 支持數組, bash4支持關聯數組

dash: 不支持數組,替代方法, 采用變量名+序號來實現類似的效果

7. 子字符串擴展

bash: 支持${parameter:offset:length},${parameter:offset}

dash: 不支持, 替代方法:采用expr或cut外部命令代替

8. 大小寫轉換

bash: 支持${parameter^pattern},${parameter^^pattern},${parameter,pattern},${parameter,,pattern}

dash: 不支持,替代方法:采用tr/sed/awk等外部命令轉換

9. 進程替換<(command), >(command)

bash: 支持進程替換

dash: 不支持, 替代方法, 通過臨時文件中轉

10. [ string1 = string2 ] 和 [ string1 == string2 ]

bash: 支持兩者

dash: 只支持=

11. [[ 加強版test

bash: 支持[[ ]], 可實現正則匹配等強大功能

dash: 不支持[[ ]], 替代方法,采用外部命令

12. for (( expr1 ; expr2 ; expr3 )) ; do list ; done

bash: 支持C語言格式的for循環

dash: 不支持該格式的for, 替代方法,用while+$((expression))實現

13. let命令和((expression))

bash: 有內置命令let, 也支持((expression))方式

dash: 不支持,替代方法,采用$((expression))或者外部命令做計算

14. $((expression))

bash: 支持id++,id--,++id,--id這樣到表達式

dash: 不支持++,--, 替代方法:id+=1,id-=1, id=id+1,id=id-1

  • 上一篇:& ltfont face = " " & gt有哪些字體?
  • 下一篇:火影忍者疾風傳裏的前兩首主題曲名及羅馬拼音歌詞
  • copyright 2024編程學習大全網