温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

shell 变量默认值

发布时间:2020-07-18 19:16:25 来源:网络 阅读:1310 作者:happytree007 栏目:开发技术

一、环境

    ubuntu14.04 x86_64

   

二、变量默认值

    2.1     ${vari:-defaultValue}

    当var没有定义时,此时使用defaultValue, 而vari依然为空,没有改变值

     eg:
      在终端上操作

  #echo ${name}   #            //因为name没有定义,结果为空   #echo ${name:-chao ge}   #chao ge        //没有定义name,使用默认值chao ge   #echo ${name}   #           //依然为空,并未改并name变量的值



    2.2    ${vari:=defaultValue}

     当vari没有定义时,此时使用defaultValue, 同时vari也被赋值为defaultValue

      eg:

    在终端上操作

  #echo ${name}   #            //因为name没有定义,结果为空   #echo ${name:=chao ge}   #chao ge        //没有定义name,使用默认值chao ge   #echo ${name}   #chaoge         //name变量的值已经被改变

    2.3 ${vari:?value}

         当vari没有定义时,或者定义了值为空,将在终端报错并且退出,用于检查是否定义以及是否为空

        eg.

        >echo ${name}         >                     //因为没有定义name,所以输出为空         >echo ${name:?zhangsan}         >bash: name: zhangsan   //因为没有定义name,报错并退出         >echo ${name:?}         >bash: name: 参数为空或未设置         >name=   //定义name变量,但是值为空         >echo ${name:?}         >bash: name: 参数为空或未设置         >name=lisi    //设置了name的值         >echo ${name:?}         >lisi   //正常输出name的值

        

        2.4 ${vari:+value}

          当vari定义并且不为空,将用value替换vari的值,否则什么也不做, 与${vari:-value}相反

         eg:

        >echo ${myhome:+beijing}         >           //因为没有定义myhome,所以为空         >myhome=     //定义myhome,但为空         >echo ${myhome:+beijing}         >         >myhome=shanghai     //设置变量的值         >echo ${myhome:+beijing}         >beijing    //此时myhome定义了并且不为空,则替换为beijing了


 三、应用

    3.1 Makefile

             eg: linux内核中其中一个Makefile中的     

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

    3.2 函数默认参数

        和c++的默认参数异曲同工之妙

        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        


        这样就可以让函数呈现多态性






向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI