首页 > 系统相关 >shell之变量默认值

shell之变量默认值

时间:2023-01-20 09:33:26浏览次数:50  
标签:shell 变量 default value echo var 默认值 bash name

{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,变量,default,value,echo,var,默认值,bash,name
From: https://www.cnblogs.com/exmyth/p/17062424.html

相关文章

  • Python入门之变量
    """变量:在内存中存储数据"""#语法:#变量名称=对象#例如:name="张无忌"print(name)#语义:内存图#变量名:真实内存地址的别名#见名知意#......
  • JMeter BeanShell 学习
    JMeterBeanShell学习Beanshell分为:JMeter有如下BeanShell组件:定时器:BeanShellTimer前置处理器:BeanShellPreProcessor采样器:BeanShellSampler后置处理器......
  • 改变地址上的值 和 把地址上的值赋给一个变量,改变变量的值 的区别
    之前没认真想过的一个点,改变地址上的值和把地址上的值赋给一个变量,改变变量的值的区别1inta=2;2int*p=&a;345//改变地址上的值6(*p)=3;//......
  • Xshell 使用自定义用户密钥登录, 类似 ssh-keygen -t rsa
    1.菜单栏工具-用户密钥-生成2.按提示生成后,点击属性,在__常规__选项卡旁边有公钥按钮。使用key登录后还需要提供用户名。......
  • playbook 之 内置变量
    可以通过ansible127.0.0.1-msetup查看支持的内置变量-hosts:127.0.0.1tasks:-name:debugdebug:msg:"hostname:{{ansible_hostname}}ip:{......
  • playbook 之 注册变量
    每一个task执行后都有一些返回信息我们可以通过register把这些返回信息赋值给变量-hosts:127.0.0.1tasks:-name:mkdirfile:path:/tmp/1......
  • playbook 之 内置变量
    可以通过ansible127.0.0.1-msetup查看支持的内置变量-hosts:127.0.0.1tasks:-name:debugdebug:msg:"hostname:{{ansible_hostname}}ip:{......
  • Nginx日志按天自动切割的shell脚本
    简介默认情况Nginx会把所有访问日志生成到一个指定的访问日志文件access.log里,但这样一来,时间长了就会导致日志内容很多,不利于分析日志和处理,因此,有必要对Nginx按天或按......
  • OpenMP 环境变量使用总结
    OpenMP环境变量使用总结OMP_CANCELLATION,在OpenMP规范4.5当中规定了取消机制,我们可以使用这个环境变量去设置是否启动取消机制,如果这个值等于TRUE那么就是开启线......
  • MyBatis使用foreach批量插入一个含List<实体>成员变量的实体类
    文章目录​​一、List<String>​​​​二、List<IntEntity>​​​​三、再次修改​​MyBatis使用foreach批量插入一个实体类数据,其中这个实体类包含一个List的成员变量。即......