溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

shell 變量默認(rèn)值

發(fā)布時(shí)間:2020-07-18 19:16:25 來源:網(wǎng)絡(luò) 閱讀:1273 作者:happytree007 欄目:開發(fā)技術(shù)

一、環(huán)境

    ubuntu14.04 x86_64

   

二、變量默認(rèn)值

    2.1     ${vari:-defaultValue}

    當(dāng)var沒有定義時(shí),此時(shí)使用defaultValue, 而vari依然為空,沒有改變值

     eg:
      在終端上操作

  #echo ${name}
  #            //因?yàn)閚ame沒有定義,結(jié)果為空
  #echo ${name:-chao ge}
  #chao ge        //沒有定義name,使用默認(rèn)值chao ge
  #echo ${name}
  #           //依然為空,并未改并name變量的值



    2.2    ${vari:=defaultValue}

     當(dāng)vari沒有定義時(shí),此時(shí)使用defaultValue, 同時(shí)vari也被賦值為defaultValue

      eg:

    在終端上操作

  #echo ${name}
  #            //因?yàn)閚ame沒有定義,結(jié)果為空
  #echo ${name:=chao ge}
  #chao ge        //沒有定義name,使用默認(rèn)值chao ge
  #echo ${name}
  #chaoge         //name變量的值已經(jīng)被改變

    2.3 ${vari:?value}

         當(dāng)vari沒有定義時(shí),或者定義了值為空,將在終端報(bào)錯(cuò)并且退出,用于檢查是否定義以及是否為空

        eg.

        >echo ${name}
        >                     //因?yàn)闆]有定義name,所以輸出為空
        >echo ${name:?zhangsan}
        >bash: name: zhangsan   //因?yàn)闆]有定義name,報(bào)錯(cuò)并退出
        >echo ${name:?}
        >bash: name: 參數(shù)為空或未設(shè)置
        >name=   //定義name變量,但是值為空
        >echo ${name:?}
        >bash: name: 參數(shù)為空或未設(shè)置
        >name=lisi    //設(shè)置了name的值
        >echo ${name:?}
        >lisi   //正常輸出name的值

        

        2.4 ${vari:+value}

          當(dāng)vari定義并且不為空,將用value替換vari的值,否則什么也不做, 與${vari:-value}相反

         eg:

        >echo ${myhome:+beijing}
        >           //因?yàn)闆]有定義myhome,所以為空
        >myhome=     //定義myhome,但為空
        >echo ${myhome:+beijing}
        >
        >myhome=shanghai     //設(shè)置變量的值
        >echo ${myhome:+beijing}
        >beijing    //此時(shí)myhome定義了并且不為空,則替換為beijing了


 三、應(yīng)用

    3.1 Makefile

             eg: linux內(nèi)核中其中一個(gè)Makefile中的     

   #Default value
   head-y        := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
    textofs-y    := 0x00008000

    3.2 函數(shù)默認(rèn)參數(shù)

        和c++的默認(rèn)參數(shù)異曲同工之妙

        default_parameters.cpp

     #include<iostream>
     void func(int i=1, double d=2.0, float f=3.0)
      {
         std::cout << i <<", " <<d <<", " << f << std::endl;
      }
      int main(int argc, char *args[]) 
     {
         func();
       func(10);
       func(10, 99.9);
       func(20, 33.3, 9.3f);
                     
             return 0;
      }

    #g++ default_parameters.cpp

    # ./a.out
    1, 2, 3
    10, 2, 3
    10, 99.9, 3
    20, 33.3, 9.3

    default_parameters.sh

    #!/bin/bash
  
    func()
   {
    echo "${1:-10}, ${2:-10.2}, ${3:-zhangsan}" 
    }
  
   func
   func 23
   func 23 12.0
   func 34 23.0 lisi

    #bash default_parameters.sh

    10, 10.2, zhangsan
    23, 10.2, zhangsan
    23, 12.0, zhangsan
    34, 23.0, lisi        


        這樣就可以讓函數(shù)呈現(xiàn)多態(tài)性






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI