取值/赋值
表达式 | 含义 | 实例 |
---|
${val} 或者 $val | 取值 | val="value"
echo "$val"
>value |
${val-defaultValue} | 如果变量没有被声明, 则返回 - 后面的值 | echo "${val-default value}"
>default value |
${val:-defaultValue} | 如果变量没有被声明或者其值为空, 则返回 :- 后面的值 | val=""
echo "${val:-default value}"
>default value
echo "${val-default value}"
> |
${val=initValue} | 如果变量没有被声明, 则返回 = 后面的值 | echo "${val=init value}"
>init value
echo "$val"
>init value |
${val:=initValue} | 如果变量没有被声明或者其值为空, 则返回 := 后面的值 | val=""
echo "${val:=init value}"
>init value
echo "$val"
>init value |
${val+otherValue} | 如果变量被声明了,则返回 + 后面的值,否则返回 null | echo "$val+other value"
>
val=""
echo "$val+other value
>other value |
${val:+otherValue} | 如果变量被声明了并且其值不为空,则返回 :+ 后面的值,否则返回 null | echo "$val:+other value"
>
val=""
echo "$val:+other value
>
val="1"
echo "$val:+other value"
>other value |
${val?ERR_MSG} | 如果变量没有被声明,则将 ? 后面的值输出到 stderr | |
${val:?ERR_MSG} | 如果变量没有被声明或者其值为空,则将 ? 后面的值输出到 stderr | |
${!valprefix*} 或者 ${!valprefix@} | 返回所有以 valprefix 开头的变量名称,以空格隔开 | val1="1" && val2="" && va3="3" && val4="4"
echo "${!val*}"
>val1 val2 val4 |
字符串变换
需要注意的是:下面所有的操作都不会改变变量的原始值,仅返回对应的结果
表达式 | 含义 | 实例 |
---|
${#string} | 获取字符串的长度 | echo "${aa}"
>0
val="10"
>2 |
${string:position} | 返回从 position 开始到结束的子字符串 | val="12"
echo "${val:0}"
>12
echo "${val:1}"
>2 |
${string:position:length} | 返回从 position 开始,长度为 length 的子字符串 | val="12"
echo "${val:0:1}"
>1 |
${string#regpattern} | 从变量 string 的开头,删除最短匹配 regpattern 的子串,并将剩余的字符串返回 | val1="aabbaa"
echo "${val1#aa}"
>bbaa
echo "${val1#*bb}"
>aa |
${string##regpattern} | 从变量 string 的开头, 删除最长匹配 regpattern 的子串,并将剩余的字符串返回 | val1="aabbaabb"
echo "${val1##aa}"
>bbaabb
echo "${val1##*bb}"
> |
${string%regpattern} | 从变量 string 的结尾,删除最短匹配 regpattern 的子串,并返回剩余字符串 | val1="aabbaabb"
echo "${val1%b}"
>aabbaab
echo "${val1%aa*}"
>aabb |
${string%%regpattern} | 从变量 string 的结尾,删除最长匹配 regpattern 的子串,并返回剩余字符串 | val1="aabbaabb"
echo "${val1%%b}"
>aabbaa
echo "${val1%%aa*}"
> |
${string/regpattern/replacement} | 使用 replacement ,来代替第一个匹配的 regpattern ,并返回替换结果 | val1="aabbaabb"
echo "${val1/bb/cc}"
>aaccaabb
echo "${val1/bb*/cc}"
>aacc |
${string//regpattern/replacement} | 使用 replacement ,代替所有匹配的 regpattern ,并返回结果 | val1="aabbaabb"
echo "${val1//bb/cc}"
>aaccaacc
echo "${val1//bb*/cc}"
>aacc |
${string/#regpattern/replacement} | 如果 string 的前缀匹配 regpattern ,那么就用 replacement 来代替匹配到的 regpattern 。类似正则表达式中的 ^ | |
${string/%regpattern/replacement} | 如果 string 的后缀匹配 regpattern , 那么就用 replacement 来代替匹配到的 regpattern 。类似正则表达式中的 $ | |