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


    + 和 - 号 

    1.赋值

    1. name=peiqi
    2. 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}:与上面的差不多,但它仅在变量未设置的情况下使用默认值,而在变量为空字符串时不会使用默认值。

    示例

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

    输出

    1. peiqi
    2. abc

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

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

    示例

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

    输出

    1. hello
    2. world

    总结

    在 Bash 脚本中:

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

    = 号

     1.变量被定义的情况下

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

    2.变量未定义的情况:

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

    3.变量为空的情况:

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

    结论:

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

    :- 和 := 用法详细区别

    := 用法

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

    例子:

    1. # 变量未定义
    2. unset name
    3. echo ${name:=app} # 输出:app,并将 name 设置为 app
    4. echo $name # 输出:app,因为 name 已被设置为 app
    5. # 变量为空
    6. name=""
    7. echo ${name:=app} # 输出:app,并将 name 设置为 app
    8. echo $name # 输出:app
    9. # 变量已有值
    10. name="peiqi"
    11. echo ${name:=app} # 输出:peiqi,name 保持不变
    12. echo $name # 输出:peiqi

    :- 用法

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

    例子:

    1. # 变量未定义
    2. unset name
    3. echo ${name:-app} # 输出:app,但不修改 name
    4. echo $name # 输出为空行,因为 name 未被设置
    5. # 变量为空
    6. name=""
    7. echo ${name:-app} # 输出:app,但不修改 name
    8. echo $name # 输出:空行,因为 name 没有被修改
    9. # 变量已有值
    10. name="peiqi"
    11. echo ${name:-app} # 输出:peiqi,name 保持不变
    12. echo $name # 输出:peiqi

    详尽总结

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

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

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

    比较图表

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

    实际应用例子

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

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

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

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

  • 相关阅读:
    android5.1 launcher2去掉桌面应用图标
    如何实现办公自动化?
    【JavaEE网络】深入理解Socket套接字及其在网络编程中的应用
    【Java牛客刷题】入门篇(04)
    C语言--结构体(内容超级详细)
    蓝桥杯2021年第十二届省赛真题-时间显示(C and C++)
    实现一个三角形、扇形、宽高自适应的正方形
    多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)
    基于Springboot+vue的校园社团管理系统(Java毕业设计)
    Windows 11 已修复 AMD CPU 性能问题
  • 原文地址:https://blog.csdn.net/Lzcsfg/article/details/139424761