变量赋值中 + 号 - 号 = 号的用法

server/2024/10/21 5:57:49/

+ 和 - 号 

1.赋值

name=peiqi
echo "$name"
  • name=peiqi 是一个变量赋值,将字符串 peiqi 赋值给变量 name
  • echo "$name" 用来输出变量 name 的值。

输出

peiqi

2.未定义变量的默认值
在 Bash 中,${var:-default} 和 ${var:+replacement} 是两种常用的变量扩展操作。

${var:-default} 和 ${var-default}`

  • ${var:-default}:如果变量 var 未设置或为空,则使用 default 作为默认值。
  • ${var-default}:与上面的差不多,但它仅在变量未设置的情况下使用默认值,而在变量为空字符串时不会使用默认值。

示例

name=
echo "${name:-peiqi}"  # 输出 "peiqi",因为 name 变量为空
echo "${name-abc}"  # 输出 ""(空),因为 name 变量虽然为空但已设置

输出

peiqi
abc

${var:+replacement} 和 ${var+replacement}`

  • ${var:+replacement}:如果变量 var 被设置,则使用 replacement 替换变量的值。如果变量 var 未设置,则返回空字符串。
  • ${var+replacement}:与${var:+replacement} 类似,只不过它作用更简洁,直接设置替换值。

示例

name=peiqi
echo "${name:+hello}"  # 输出 "hello",因为 name 变量已设置
echo "${name+world}"  # 输出 "world",因为 name 变量已设置unset name  # 删除 name 变量的设置
echo "${name:+hello}"  # 输出 ""(空),因为 name 变量未设置
echo "${name+world}"  # 输出 ""(空),因为 name 变量未设置

输出

hello
world

总结

在 Bash 脚本中:

  • - 号常用于变量未设置或为空时使用默认值。
  • + 号常用于变量已设置时替换为特定值。

= 号

 1.变量被定义的情况下

name=peiqi
echo ${name:=app}  # 输出:peiqi
echo $name  # 输出:peiqi,验证变量 value 未改变

2.变量未定义的情况:

    unset name  # 确保变量 name 未设置echo ${name:=app}  # 输出:app,因为 name 未被设置,呢么将其设置为 appecho $name  # 输出:app,变量 name 现在被设置为 app

3.变量为空的情况:

    name=""echo ${name:=app}  # 输出:app,因为 name 为空,呢么将其设置为 appecho $name  # 输出:app,真正的将变量 name 设置为 app

结论:

  • ${var:=value} 语法在 Bash 中用于当 var 变量未设置或为空时,将其设置为 value,并返回 value
  • 如果 var 已经被设置且有值,则直接返回该变量的值,而不修改其内容。

:- 和 := 用法详细区别

:= 用法

${var:=value} 语法用于当 var 变量未设置或为空时,将其设置为 value,同时返回 value。如果 var 已经被设置且有值,则直接返回该变量的值,而不修改其内容。

例子:

# 变量未定义
unset name
echo ${name:=app}  # 输出:app,并将 name 设置为 app
echo $name  # 输出:app,因为 name 已被设置为 app# 变量为空
name=""
echo ${name:=app}  # 输出:app,并将 name 设置为 app
echo $name  # 输出:app# 变量已有值
name="peiqi"
echo ${name:=app}  # 输出:peiqi,name 保持不变
echo $name  # 输出:peiqi

:- 用法

${var:-value} 语法用于当 var 变量未设置或为空时,返回 value,但不对 var 进行任何修改。如果 var 已经被设置且有值,则直接返回该变量的值。

例子:

# 变量未定义
unset name
echo ${name:-app}  # 输出:app,但不修改 name
echo $name  # 输出为空行,因为 name 未被设置# 变量为空
name=""
echo ${name:-app}  # 输出:app,但不修改 name
echo $name  # 输出:空行,因为 name 没有被修改# 变量已有值
name="peiqi"
echo ${name:-app}  # 输出:peiqi,name 保持不变
echo $name  # 输出:peiqi

详尽总结

  • :=(变量设置并返回):

    • 如果变量未设置或为空,它将变量设置为指定的值,并且返回这个值。
    • 如果变量已被设置并有值,它什么都不做,仅返回这个变量的值。
  • :-(变量替代返回):

    • 如果变量未设置或为空,它返回指定的值,但不会对变量进行任何修改。
    • 如果变量已被设置并有值,它直接返回这个变量的值,不做修改。

比较图表

表达式变量未设置结果变量为空结果变量有值结果
${var:=v}返回v,设置var=v返回v,设置var=v返回var,不修改
${var:-v}返回v,不修改返回v,不修改返回var,不修改

实际应用例子

使用 := 的场景:
提供一个默认值,并确保变量在后续使用中是有意义的。

# 确保变量有值,用于配置文件路径
config_file=${CONFIG_FILE:=/etc/default/config}
echo "Config file path is $config_file"

使用 :- 的场景:
仅提供临时的默认值,不改变全局变量状态。

# 安全提示用户路径,但不改动实际变量
echo "Config file path is ${CONFIG_FILE:-/etc/default/config}"


http://www.ppmy.cn/server/47384.html

相关文章

【已解决】记录Vue2.x中npm install下载依赖报错:python2 Error: not found: python2问题(具体操作步骤)

项目场景: 项目场景:在项目开发中,升级了本地node版本后,重新npm install下载依赖报错找不到python环境 not found: python2 npm ERR! gyp verb check python checking for Python executable “python2” in the PATH 在尝试了各…

Django的PATH路径转换器

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等,可以从前言给出的下载信息下载,大家可以评估一下。 在Django框架中,默认内置了一组PATH路径转换器,具…

eclipse-IResourceDeltaVisitor

IResourceDeltaVisitor 是 Eclipse 平台中的一个接口,它用于访问和处理资源的变更(delta)。资源变更是指在工作空间中发生的资源变化,比如文件的创建、删除、修改等。 Eclipse 的资源变化检测机制允许插件响应这些变化&#xff0…

简单聊下服务器防病毒

在当今数字化时代,服务器作为数据存储、处理与传输的核心设备,其安全性显得尤为关键。服务器防病毒工作,不仅是保障企业信息安全的重要一环,更是维护用户数据隐私的关键举措。以下,我们将从多个方面,简单探…

C++ priority_queue简单源码剖析:priority_queue模拟实现

文章目录 1. priority_queue介绍2. priority_queue模拟实现3. 适配器与虚函数 大家好!本文会用C模拟一个基本的priority_queue类,帮助我们更好的理解priority_queue的内置函数的实现与规则。 1. priority_queue介绍 priority_queue被叫做优先队列&#…

微服务学习Day11-缓存问题学习

文章目录 多级缓存引入JVM进程缓存导入商品案例Caffeine学习实现进程缓存 Lua语法入门认识Lua变量和循环条件控制、函数 多级缓存安装OpenRestyOpenResty入门请求参数处理查询TomcatRedis缓存预热查询Redis缓存Nginx本地缓存 缓存同步策略策略安装Canal监听Canal 多级缓存引入 …

python 第四章 函数 (pycharm) (2)

一 :变量作用域 变量的作用域就是指在代码中变量能使用的位置 变量的引用 def func(a):print(a) data 10 func(data) # adata 参数a引用了data的数据 data2 20 func2(data2) 变量的分类 全局变量 在函数外定义,可以在代码中任意位置使用的变量 …

线性代数|机器学习-P1课程简介

文章目录 1. 书籍下载2. 正文 1. 书籍下载 链接:https://pan.baidu.com/s/1QbK0enLh0x4nU1c4Tqwlkw 提取码:r7ft 本课程回顾线性代数在概率论、统计学、优化和深度学习中的应用。是GILBERT STRANG教授的有一个经典的课程。课程将线性代数分为如下部分&a…