最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

先說下bash shell與bash shell的關系。

什么是bash ?

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

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

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

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

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

腳本內容如下:

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,腳本對應的行號如下所示:

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

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

 為何???

原來,dash是很奇葩的:

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

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

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

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

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

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

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

相關文章

最新評論

南城县| 铜鼓县| 信阳市| 宜丰县| 社旗县| 巴塘县| 临漳县| 吕梁市| 江山市| 夏邑县| 通许县| 白朗县| 忻城县| 讷河市| 绥棱县| 定襄县| 昌江| 永丰县| 苍梧县| 安达市| 清水县| 康乐县| 普兰县| 池州市| 左贡县| 牙克石市| 秀山| 荆州市| 临安市| 三台县| 体育| 泰安市| 甘洛县| 巴里| 班戈县| 天镇县| 泸州市| 上栗县| 南木林县| 鄂托克前旗| 重庆市|