shell中的参数替换
2013-11-04 10:53:07
分类: 嵌入式
常用类型参数替换 ${parameter} 与$parameter相同, 也就是变量parameter的值. 在某些上下文中, ${parameter}很少会产生混淆. ${parameter-default} 如果变量parameter没被声明, 那么就使用默认值. ${parameter:-default} 如果变量parameter没被设置, 那么就使用默认值. ${parameter-default}和${parameter:-default}在绝大多数的情况下都是相同的. 只有在parameter已经被声明, 但是被赋null值得时候, 这个额外的:才会产生不同 的结果(即此时前者不会输出,后者可以输出). ${parameter=default} 如果变量parameter没声明, 那么就把它的值设为default. ${parameter:=default} 如果变量parameter没设置, 那么就把它的值设为default. 这两种形式基本上是一样的. 只有在变量$parameter被声明并且被设置为null值的时候, :才会引 起这两种形式的不同.(如上边所示) ${parameter+alt_value} 如果变量parameter被声明了, 那么就使用alt_value, 否则就使用 null字符串. ${parameter:+alt_value} 如果变量parameter被设置了, 那么就使用alt_value, 否则就使用 null字符串. 这两种形式绝大多数情况下都一样. 只有在parameter被声明并且设置为null值的时候, 多出来的 这个:才会引起这两种形式的不同(即后者不会输出). ${parameter?err_msg} 如果parameter已经被声明, 那么就使用设置的值, 否则打印err_msg 错误消息. ${parameter:?err_msg} 如果parameter已经被设置, 那么就使用设置的值, 否则打印 err_msg错误消息. 这两种形式绝大多数情况都是一样的. 和上边所讲的情况一样, 只有在parameter被声明并设置为 null值的时候, 多出来的:才会引起这两种形式的不同. 变量长度/子串删除 ${#var} 字符串长度(变量$var得字符个数). 对于array来说, ${#array}表示的是数组中第一个元素的长度. 例外情况: ${#*}和${#@}表示位置参数的个数. 对于数组来说, ${#array[*]}和${#array[@]}表示数组中元素的个数. ${var#Pattern}, ${var##Pattern} 从变量$var的开头删除最短或最长匹配$Pattern的子串. ${var%Pattern}, ${var%%Pattern} 从变量$var的结尾删除最短或最长匹配$Pattern的子串. 变量扩展/子串替换 这些结构都是从ksh中引入的. ${var:pos} 变量var从位置pos开始扩展(即pos之前的字符都丢弃). ${var:pos:len} 变量var从位置pos开始, 并扩展len个字符. ${var/Pattern/Replacement} 使用Replacement来替换变量var中第一个匹配Pattern的字符串. ${var//Pattern/Replacement} 全局替换. 所有在变量var匹配Pattern的字符串, 都会被替换为Replacement. ${!varprefix*}, ${!varprefix@} 匹配所有之前声明过的, 并且以varprefix开头的变量. |
|