详解
${parameter}
${parameter-default}, ${parameter:-default}
${parameter=default}, ${parameter:=default}
${parameter+alt_value}, ${parameter:+alt_value}
${parameter?err_msg}, ${parameter:?err_msg}
${#var}
${var%Pattern}, ${var%%Pattern}
${var/Pattern/Replacement}

详解

${parameter}

和$parameter是相同的,都是表示变量parameter的值。在一些环境中,使用 ${parameter}比较不会引起误解.

${parameter-default}, ${parameter:-default}

如果变量没有被设置,使用默认值。${parameter-default}和 ${parameter:-default}几乎是相等的。它们之间的差别是:当一个参数已被声 明,但是值是NULL的时候两者不同.

${parameter=default}, ${parameter:=default}

如果变量parameter没有设置,把它设置成默认值. 两种形式几乎相同,只是和上 面的一样: 只有当$parameter变量被声明且被设置成null值时不同.

${parameter+alt_value}, ${parameter:+alt_value}

如果变量parameter设置,使用alt_value作为新值,否则使用空字符串。除了引 起的当变量被声明且值是空值时有些不同外,两种形式几乎相等。

${parameter?err_msg}, ${parameter:?err_msg}

如果变量parameter已经设置,则使用该值,否则打印err_msg错误信息。这两种 形式几乎相同,仅有和上面所说的一点不同:带有:使当变量已声明但值是空值时 不同.

${#var}

字符串长度(即变量$var的字符个数)。对于数组来说,${#array}是数组的第一 个元素的升序.

例外情况 :

* ${var#Pattern}, ${var##Pattern}

删除从$var前端开始的最短或最长匹配$Pattern的字符串。

$ cd /usr/local/share    # 先进入一个长点的目录
$ echo "$PWD"
/usr/local/share   # 得到当前路径的全名
$ echo "${PWD#*/}"   # 用删除从 "/usr/local/share" 字符串开头最小匹配 "*/" 的字符串
usr/local/share
$ echo "${PWD##*/}"  # 删除最长匹配
share

${var%Pattern}, ${var%%Pattern}

删除从$var后端(结尾)开始的最短或最长匹配$Pattern的字符串。

${var/Pattern/Replacement}

在变量var第一个匹配Pattern的字符串用Replacement代替. 如果省略了 Replacement ,则第一个匹配Pattern的字符串会被删除.