欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

bash shell和dash shell的區(qū)別詳解

 更新時間:2023年05月06日 16:29:17   作者:架構(gòu)師李肯  
本文主要介紹了bash shell和dash shell的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近在工作中遇到一個很奇葩的問題,就是一個嵌入式的SDK編譯,它里面執(zhí)行shell命令的時候,使用的dash shell來解析,而通常我們默認(rèn)用的是bash shell來解析;我按照bash shell那樣照常編寫腳本,大部分的腳本是沒有問題的,但是偏偏就被我遇到了不一樣的地方,以此文記錄下。

先說下bash shell與bash shell的關(guān)系。

什么是bash ?

Bash(GNU Bourne-Again Shell)是許多Linux平臺的內(nèi)定Shell,事實上,還有許多傳統(tǒng)UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。

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

Debian和Ubuntu中,/bin/sh默認(rèn)已經(jīng)指向dash,這是一個不同于bash的shell,它主要是為了執(zhí)行腳本而出現(xiàn),而不是交互,它速度更快,但功能相比bash要少很多,語法嚴(yán)格遵守POSIX標(biāo)準(zhǔn)。

簡單來說,就是dash是bash的簡化版本,沒有支持那么復(fù)雜的東西。

再看下我遇到的問題,為了好做對比,我分別寫了1個腳本,分別用bash和dash去解析運行,得出不同的答案。

腳本內(nèi)容如下:

result=1234
if [[ "$result" == "1234" ]]; then
        echo "yes"
else
        echo "no"
fi
if [ "$result" == "1234" ]; then
        echo "yes"
else
        echo "no"
fi
if [[ "$result" = "1234" ]]; then
        echo "yes"
else
        echo "no"
fi
if [ "$result" = "1234" ]; then
        echo "yes"
else
        echo "no"
fi

OK,腳本對應(yīng)的行號如下所示:

使用/bin/bash運行,一切正常,輸出4個yes。

使用/bin/dash運行,只有一個輸出正常,3處報錯?。?!

 為何???

原來,dash是很奇葩的:

  • if 里面的條件語句只能使用 [ ] 不能使用 [[ ]];
  • 字符串判斷,只能使用 = 不能使用 ==;

word天吶??!就是這么回事。

我們還可以使用 ls -al /bin/sh查看下系統(tǒng)默認(rèn)的shell解析器是什么,如下: 

至于 [ ] 與 [[ ]] 的區(qū)別,可以參考這篇文章:Linux Shell 中的 ()、(())、[]、[[]]、{} 怎么用是不是還傻傻分不清?

== 可用于判斷變量是否相等,= 除了可用于判斷變量是否相等外,還可以表示賦值。

= 與 == 在 [ ] 中表示判斷(字符串比較)時是等價的。

到此這篇關(guān)于bash shell和dash shell的區(qū)別詳解的文章就介紹到這了,更多相關(guān)bash shell和dash shell內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux下自動刪除過期備份和自動異地備份的腳本

    Linux下自動刪除過期備份和自動異地備份的腳本

    這篇文章主要介紹了Linux下自動刪除過期備份和自動異地備份,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • 一個簡單的linux命令 cp

    一個簡單的linux命令 cp

    這篇文章主要介紹了一個簡單的linux命令cp,cp命令用來復(fù)制文件或者目錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • linux 監(jiān)視端口是否正常的shell腳本

    linux 監(jiān)視端口是否正常的shell腳本

    linux 監(jiān)視端口是否正常的shell腳本,需要的朋友可以參考下
    2013-01-01
  • Shell腳本用for循環(huán)遍歷參數(shù)的方法技巧

    Shell腳本用for循環(huán)遍歷參數(shù)的方法技巧

    今天小編就為大家分享一篇關(guān)于Shell腳本用for循環(huán)遍歷參數(shù)的方法技巧,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • shell腳本實現(xiàn)一鍵獲取linux內(nèi)存/cpu/磁盤IO信息

    shell腳本實現(xiàn)一鍵獲取linux內(nèi)存/cpu/磁盤IO信息

    這篇文章主要為大家詳細(xì)介紹了如何通過shell腳本實現(xiàn)一鍵獲取linux內(nèi)存/cpu/磁盤IO等信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-12-12
  • shell腳本的流程控制語句的實現(xiàn)

    shell腳本的流程控制語句的實現(xiàn)

    本文主要介紹了shell腳本的流程控制語句的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • ping發(fā)現(xiàn)掉包報警的shell代碼

    ping發(fā)現(xiàn)掉包報警的shell代碼

    一般用來判斷服務(wù)器是否穩(wěn)定,加入crontab中讓其10分鐘跑一次,需要的朋友可以參考下
    2013-01-01
  • Linux vim編輯命令模式

    Linux vim編輯命令模式

    vi(vim)是上Linux非常常用的編輯器,很多Linux發(fā)行版都默認(rèn)安裝了vi(vim)。這篇文章給大家介紹了Linux vim編輯命令模式,非常不錯,感興趣的朋友參考下吧
    2016-11-11
  • shell中使用echo打印彩色字體和彩色背景的方法

    shell中使用echo打印彩色字體和彩色背景的方法

    這篇文章主要介紹了shell中使用echo打印彩色字體和彩色背景的方法,本文方法比較好玩,需要的朋友可以參考下
    2014-12-12
  • awk中實現(xiàn)ord函數(shù)功能

    awk中實現(xiàn)ord函數(shù)功能

    這篇文章主要介紹了awk中實現(xiàn)ord函數(shù)功能,ord函數(shù)用來將字符轉(zhuǎn)化對應(yīng)的ascii碼,本文給出awk中的ord函數(shù)實現(xiàn)方法,需要的朋友可以參考下
    2014-08-08

最新評論