Bash中的大括号扩展

最近有人问${}里面的参数怎么看不懂呢?
${name:-default}使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量name;
例子
1,

2,

结果111
name=222
echo ${name:-111}
结果222
${name:=default}使用指定值来代替空的或者没有赋值的变量name;
貌似和上一个一样

3,

${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退出码1。
${#name} 给出name的长度
${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分
${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分
${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分
${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分

参考:

http://www.thegeekstuff.com/2010/06/bash-shell-brace-expansion/#more-4614

http://www.linuxidc.com/Linux/2011-04/34731.htm