吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【RT-Thread學習筆記】bash和dash-shell

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-30 13:49 ? 次閱讀

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

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

什么是bash ?

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

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

Debian和Ubuntu中,/bin/sh默認已經指向dash,這是一個不同于bash的shell,它主要是為了執行腳本而出現,而不是交互,它速度更快,但功能相比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
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

OK,腳本對應的行號如下所示:

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

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

為何???

原來,dash是很奇葩的:

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

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

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

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

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

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

今天的總結就介紹到這,有什么問題,歡迎你在評論區告訴我。

審核編輯:湯梓紅

?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5092

    文章

    19177

    瀏覽量

    307690
  • Shell
    +關注

    關注

    1

    文章

    366

    瀏覽量

    23447
  • Bash
    +關注

    關注

    0

    文章

    57

    瀏覽量

    10207
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40386
收藏 人收藏

    評論

    相關推薦

    RT-Thread學習筆記】使用scons命令生成靜態庫

    RT-Thread學習筆記】如何使用scons 命令中buildlib的生成靜態庫?
    的頭像 發表于 07-27 09:13 ?6191次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】使用scons命令生成靜態庫

    RT-Thread學習筆記bash shell -e參數

    bash shell -e參數的含義與用途,你了解嗎?
    的頭像 發表于 07-28 05:20 ?1906次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】<b class='flag-5'>bash</b> <b class='flag-5'>shell</b> -e參數

    RT-Thread學習筆記和finsh shell配置方法

    配置。圖解詳細步驟:RT-Thread學習筆記--finsh shell配置方法 RT-Thread學習
    發表于 02-12 00:01

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> Nano入門<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    RT-Thread 應用筆記 - RTC Alarm 組件的使用

    RT-Thread 應用筆記 - 不正確使用LOG也會引發hard faultRT-Thread 應用筆記 - RTC Alarm 組件的使用RT-
    發表于 01-25 18:18 ?10次下載
    <b class='flag-5'>RT-Thread</b> 應用<b class='flag-5'>筆記</b> - RTC Alarm 組件的使用

    RT-Thread 內核學習筆記 - 理解defunct僵尸線程

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 理解defunct僵尸線程

    RT-Thread 內核學習筆記 - 設備模型rt_device的理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:19 ?8次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 設備模型<b class='flag-5'>rt</b>_device的理解

    RT-Thread 內核學習筆記 - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:23 ?6次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象鏈表結構深入理解

    RT-Thread 內核學習筆記 - 內核對象初始化鏈表組織方式

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:24 ?3次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象初始化鏈表組織方式

    RT-Thread 內核學習筆記 - 內核對象操作API

    RT-Thread 內核學習筆記 - 內核對象rt_objectRT-Thread 內核學習筆記
    發表于 01-25 18:26 ?7次下載
    <b class='flag-5'>RT-Thread</b> 內核<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 內核對象操作API

    RT-Thread學習筆記 RT-Thread的架構概述

    RT-Thread 簡介 作為一名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發現 RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發表于 07-09 11:27 ?4611次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b> <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread學習筆記】Makefile的FORCE

    RT-Thread學習筆記】十分鐘學會Makefile的FORCE
    的頭像 發表于 07-30 13:55 ?2682次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】Makefile的FORCE

    RT-Thread學習筆記】如何抓取終端的網絡報文

    RT-Thread學習筆記】如何抓取終端的網絡報文?
    的頭像 發表于 07-30 13:57 ?2921次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】如何抓取終端的網絡報文

    RT-Thread學習筆記】用memwatch排除內存泄露

    RT-Thread學習筆記】使用memwatch排除內存泄露
    的頭像 發表于 07-30 14:01 ?2414次閱讀
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>】用memwatch排除內存泄露

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?4134次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>學習</b>
    博九百家乐官网娱乐城| 百家乐和21点| 百家乐实时赌博| 博马百家乐官网娱乐城| 百家乐必胜赌| 百家乐官网平台哪个有在线支付呢| 风水24山分房图| 皇家一号娱乐城| 百家乐视频游戏网站| 突泉县| 百家乐娱乐网代理佣金| 百家乐官网路纸下| 广州太阳城巧克力社区| 爱赢百家乐官网的玩法技巧和规则| 菲律宾云顶国际| 百家乐龙虎台布| 百家乐官网双人操作分析仪| 澳门博彩8345cc| 棋牌百家乐程序破解| 百家乐官网高手心得| 六合彩开码现场| 百家乐里什么叫洗码| 网络百家乐官网打揽| 宣威市| 申博太阳城官网| 网上百家乐官网乐代理| 3U百家乐官网娱乐城| 大发888是什么软件| 百家乐客户端皇冠| 百家乐官网电脑游戏高手| 大发888官方 df888 gfxzylc8| 澳门百家乐战法| 广州百家乐官网赌场娱乐网规则 | 百家乐官网微心打法| 大发888最新官方网址| 百家乐六手变化混合赢家打法| 百家乐官网官网游戏| 百家乐官网胜率在哪| 梭哈棋牌游戏大厅| 91百家乐的玩法技巧和规则| 百家乐单机游戏免费|