1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| 如果 parameter 未定义或值为空, 将替换为 word 的扩展. 否则, 将替换为 parameter 的值.
${parameter:-word}
如果 parameter 未定义或值为空, word 的扩展将赋予 parameter. parameter 的值将被替 换. 位置参数和特殊参数不能用这种方式赋值.
${parameter:=word}
如果 parameter 未定义或值为空, word (或一条信息, 如果 word 不存在) 的扩展将写入到标准错误; shell 如果不是交互的, 则将退出. 否则, parameter 的值将被替换.
${parameter:?word}
如果 parameter 未定义或非空, 不会进行替换; 否则将替换为 word 扩展后的值.
${parameter:+word}
扩展为parameter 的最多 length 个字符, 从 offset 指定的字符开始. 如果忽略了 length, 扩展为 parameter 的子字符串, 从 offset 指定的字符串开始. length 和 offset 是算术表达式 (参见下面的 ARITHMETIC EVALUATION 算术求值 段落). length 必须是一个大于等于 0 的数值. 如果 offset 求值结果小于 0, 值将当作从 parameter 的值的末尾算起的偏移量. 如果 parameter 是 @, 结果是 length 个位置参数, 从 offset 开始. 如果 parameter 是 一个数组名, 以 @ 或 * 索引, 结果是数组的 length 个成员, 从 ${parameter[offset]} 开始. 子字符串的下标是从 0 开始 的, 除非使用位置参数时, 下标从 1 开始.
${parameter:offset} ${parameter:offset:length}
${!prefix*}
如果这个模式匹配 parameter 扩展后的值的尾部, 那么扩展的结果是将 parameter 扩展后的值中, 最短的匹配 (``%'' 的情况) 或者最长的匹配 (``%%''的情况) 删除的结果. 如果 parameter 是 @ 或者是 *, 则模 式删除操作将依次施用于每个位置参数, 最后扩展为结果的列表. 如果 parameter 是一个数组变量, 下标是 @ 或者是 *, 模式删除 将依次施用于数组中的每个成员, 最后扩展为结果的列表.
${parameter%word} ${parameter%%word}
parameter 被扩展, 其值中最长的匹配 pattern 的内容被替换为 string. 在 第一种形式中, 只有第一个匹配被替换. 第二种形式使得 pattern 中所有匹配都被替换为 string. 如果 pattern 以 如果 pattern 以 % 开始, 它必须匹配 parameter 扩展后值的尾部. 如果 string 是空 值, pattern 的匹配都将被删除, pattern 之后的 / 将被忽略. 如果 parameter 是 @ 或者是 *, 则替换操作将依次施用于每个位 置参数, 最后扩展为结果的列表. 如果 parameter 是一个数组变量, 下标是 @ 或者是 *, 模式删除将依次施用于数组中的每个成 员, 最后扩展为结果的列表.
${parameter/pattern/string} ${parameter//pattern/string}
|