文章目录
1. 基本格式
Shell参数和变量扩展的最基本的格式是
${parameter}
如果parameter是数字,则是参数扩展;如果parameter是字符串,则是变量扩展;如果parameter是数组,遵循数组的扩展规则;parameter还可以是@, *, #, ?, -等,参考特殊参数的扩展。
只要在不引起混淆的情况下,{ }是可以省略的,比如
$ set -- a b c d e f g h i j k l m n
$ echo $12
a2
$ echo ${1}2
a2
$ echo ${12}
l
$ var=Hello
$ echo ${var}World
HelloWorld
$ echo $varWorld
在这种基础格式上,衍生出多种功能
2. ! 间接扩展
第一种情况,如果parameter不是nameref变量(参见declare内置命令)
$ var1=abc
$ var2=var1
$ echo ${var2}
var1
$ echo ${!var2}
abc
第二种情况,如果parameter是nameref变量
$ var1=abc
$ declare -n var2=var1
$ echo ${!var2}
var1
3. 条件扩展
条件扩展就是根据parameter是否存在,值是否是null来决定扩展出什么值。
3.1 缺省值扩展 -, :-
${parameter-word} # 如果parameter不存在,则扩展出的值为word,否则为parameter的值
${parameter:-word} # 如果parameter不存在,或者parameter存在但值为null,则扩展出的值为word,否则为parameter的值
$ echo ${unknown-abc}
abc
$ echo ${unknown:-abc}
abc
$ unknown=
$ echo ${unknown-abc}
$ echo ${unknown:-abc}
abc
$ echo ${unknown}
$ unknown=123
$ echo ${unknown-abc}
123
$ echo ${unknown:-abc}
123
3.2 赋值扩展 =, :=
${parameter=word} # 如果parameter不存在,则将word赋值给parameter
${parameter:=word} # 如果parameter不存在,或者parameter存在但值为null,则将word赋值给parameter
$ declare -p unknown
-bash: declare: unknown: not found
$ echo ${unknown=abc}
abc
$ echo ${unknown}
abc
$ unknown=
$ echo ${unknown}
$ echo ${unknown=abc}
$ echo ${unknown:=abc}
abc
$ echo ${unknown}
abc
$ unknown=123
$ echo ${unknown=abc}
123
$ echo ${unknown:=abc}
123
注意:位置参数和