+ 和 - 号
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.变量被定义的情况下
bashname=peiqi echo ${name:=app} # 输出:peiqi echo $name # 输出:peiqi,验证变量 value 未改变
2.变量未定义的情况:
unset name # 确保变量 name 未设置 echo ${name:=app} # 输出:app,因为 name 未被设置,呢么将其设置为 app echo $name # 输出:app,变量 name 现在被设置为 app
3.变量为空的情况:
name="" echo ${name:=app} # 输出:app,因为 name 为空,呢么将其设置为 app echo $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}"