温馨提示×

温馨提示×

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

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

shell 变量默认值

发布时间:2020-07-18 19:16:25 来源:网络 阅读:1257 作者: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