{var:-default_value}
当var 不存在,或者值为空时,返回default_value

name不存在,返回了一个默认值,但是name并没有改变, 后续不可访问

$ set -u # 打开访问不存在的对象将报错, set +u关闭
$ unset name # 删除name
$ echo $name
-bash: name: unbound variable
$ echo ${name:-zhangsan}
zhangsan
$ echo $name
-bash: name: unbound variable
$

name为空值,返回了一个默认值,但是name并没有改变, 后续不可访问

$ name="" # 创建name,并设置空值
$ echo $name

$ echo ${name:-lisi}
lisi
$ echo $name

$

name有值,什么都没变

$ name="wangwu"
$ echo ${name:-libai}
wangwu
$ echo $name
wangwu
$

{var:=default_value}
当var 不存在,或者值为空时,返回defaultvalue, 并且对var赋值default_value
后续可以对var进行访问,*不能对位置参数进行使用(比如$1,$2…, $等)

name不存在, 创建name,并且赋值default_value, 后续可访问

$ set -u
$ unset name # 删除name
$ echo $name
-bash: name: unbound variable
$ echo ${name:=zhangsan}
zhangsan
$ echo $name
zhangsan # 已经创建,并且赋值,后续可以访问

name存在但是值为空,赋值default_value, 后续可访问

$ name=""
$ echo $name

$ echo ${name:=lisi}
lisi
$ echo $name
lisi

name存在且有值,不替换

$ echo $name
lisi
$ echo ${name:=wangwu}
lisi
$ echo $name
lisi

对位置参数进行操作,将报错

#!/usr/bin/env bash
# 文件名: default1.sh
echo ${1:=hello}

$ bash default1.sh
$1: cannot assign in this way

{var=default_value}
当var 不存在,则返回default_value,并且对var赋值default_value
当空值也是合法的时候,则使用这个。

name不存在时,创建并赋值,后续可访问

$ set -u
$ unset name
$ echo $name
-bash: name: unbound variable
$ echo ${name=xiaowang}
xiaowang
$ echo $name
xiaowang

name存在,且不为空,不替换

$ echo $name
xiaowang
$ echo ${name=lisi}
xiaowang
$ echo $name
xiaowang

当name存在,值为空时,不替换

$ name=""
$ echo $name

$ echo ${name=wangsi}

$ echo name

{var:+value}
当var 不存在,或者值为空时,不返回信息,只有var有值时,才返回value
可用于拼接字符串

name不存在,不返回值

$ set -u
$ unset name
$ echo $name
-bash: name: unbound variable
$ echo ${name:+zhangsan}

$ echo $name
-bash: name: unbound variable

name存在,但是值为空,不返回值

$ name=""
$ echo $name

$ echo ${name:+zhangsan}

$ echo $name

name存在且有值,返回, 不改变name

$ name="lisi"
$ echo $name
lisi
$ echo ${name:+,zhangsan}
,zhangsan
$ echo $name
lisi

比如将文件内容合并为一行,并且用逗号分隔

$ cat 1.txt

$ while read LINE;do content=${content}${content:+,}$LINE;done<1.txt
$ echo $content
1,2,3,4,5

${pos:?errmsg}
对位置参数的判断,当位置参数不存在或者为空时,输出错误信息并退出

#!/usr/bin/env bash
# 文件名: default2.sh

param1=${1:?"参数错误,必须有一个参数,并且不为空"}
echo 第一个参数是:$param1

$ chmod +x default2.sh
$ ./default2.sh
./default2.sh: line 4: 1: 参数错误,必须有一个参数,并且不为空
$ ./default2.sh ""
/default2.sh: line 4: 1: 参数错误,必须有一个参数,并且不为空
$ ./default2.sh "hello world"
第一个参数是:hello world

shell之变量默认值的更多相关文章

  1. [原创] Shell 参数传递 与 默认值

    目录 简介 基本传参 $* 与 $@ 区别 默认参数(变量默认值) if 繁琐方式 - 变量为null = 变量为null时, 同时改变变量值 :- 变量为null 或 空字符串 := 变量为null ...

  2. shell变量默认值

    ${var:-string},${var:+string},${var:=string},${var:?string} 1. ${var:-string}和${var:=string}:若变量var为 ...

  3. 转载:as3.0下对象类型返回值与变量默认值的详细说明

    转自:http://www.cuplayer.com/player/PlayerCodeAs/2012/0905367.html Null.NaN.undefined 及各自应用对象:变量的默认值: ...

  4. Java成员变量默认值

    Java中明确规定:1.如果是引用型的,比如:String,还有类对象,他们的默认值都是:null:2.而如果是值类型:double,int,long,float,char等等,他们都是:0:还有一个 ...

  5. Java中初始变量默认值

    Java语言中有8种基本数据类型,基本情况汇总如下: 序号 数据类型 大小/位 封装类 默认值 可表示数据范围 1 byte(位) 8 Byte 0 -128~127 2 short(短整数) 16 ...

  6. shell使用变量的值,获取一个新的变量名的值

    [root@localhost ~]# cat s2.sh #!/bin/bash color_name="red" red=31 color=`eval echo '$'&quo ...

  7. Java类成员变量的默认值

    1.布尔型(boolean)变量默认值为false,byte.short.int.long为0,字符型为'\u0000'(空字符),浮点型(float double)为0.0,引用类型(String) ...

  8. 【Linux】linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

    linux bash shell之变量替换::=句法.=句法.:-句法.-句法.=?句法.?句法.:+句法.+句法   linux bash shell之变量替换::=句法.=句法.:-句法.-句法. ...

  9. Linux Shell 高级变量及字符串

    高级变量包含三个部分1.变量扩展2.命令替换3.算术扩展在Bash Shell中,$算符会触发到上述三种扩展,基本形式如下:    基本型             扩展种类            例子 ...

  10. Android的LinearLayout中orientation默认值为什么是HORIZONTAL

    在一个偶然(闲着无聊)的过程中,突然非常好奇为什么LinearLayout在不指定排列方向为垂直(VERTICAL)时就得是水平方向(HORIZONTAL)排列的.产生这个疑问的时候脑子里蹦出来的第一 ...

随机推荐

  1. 泛型dotnet

    // 什么是泛型List<T> T:表示类型参数,指代任意类型 T可以是任意标识 // 编写代码时使用特殊符号替代位置类型,在实例化或使用/调用时才会进行具体类型的定义 // 特点:重用代 ...

  2. store文件夹的处理,vuex模块化modules

    index文件代码: import Vue from "vue"; import Vuex from "vuex"; // 导入根getters import ...

  3. MYSQL存储过程-练习3 repeat循环

    MYSQL存储过程-练习3 repeat循环 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_repeat`() 4 BEGIN 5 DECLARE i INT; 6 ...

  4. Termux 使用笔记

    第一次安装完成后 发现这里面啥都没有 所以 更新源 apt update 也做不到 这是因为 源是国外 由于有墙 所以连接不上 下面这个命令可以 切换更新源 termux-change-repo 切换 ...

  5. manim边做边学--直角平面

    直角平面NumberPlane是Manim库中用于创建二维坐标平面的对象,它可以帮助用户在场景中可视化坐标轴以及网格线. 通过坐标轴.网格线以及刻度,它能够动态地展示函数曲线.几何图形以及它们的变换过 ...

  6. CF1187E 题解

    Title translation 给定一棵 \(n\) 个点的树,初始全是白点. 要做 \(n\) 步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联 ...

  7. costmap代价地图

    1 什么是costmap代价地图 在机器人进行路径规划时,我们需要明白规划算法是依靠什么在地图上来计算出来一条路径的.依靠的是gmapping扫描构建的一张环境全局地图,但是仅仅依靠一张原始的全局地图 ...

  8. uniswap v2 类比

    当然,以下是生活中的类比,帮助你理解 Uniswap V2 的核心概念: 1. 自动化做市商(AMM) 生活中的例子:自动售货机 解释:自动售货机内部有一种商品(如饮料)和一定的库存.用户通过投币购买 ...

  9. 一些有用的shell命令组合

    1.找出Linux系统中磁盘占用最大的10个文件 1)CentOS7 和 busybox 1.30.1 验证可用 find / -type f -print0 | xargs -0 du | sort ...

  10. 新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)

    DeepLiveCam是一款基于人工智能的图片替换工具,专注于提供实时人脸交换和一键视频深度伪造(deepfake)技术,能通过使用单张图片,在视频或直播中实现高精度的人脸替换 DeepLiveCam ...