有人可以解释.*
和*.
顺序背后的逻辑吗?当我想从前面移除并从后面移除时,为什么必须换掉它们?
# IP="1.2.3.4"
# echo ${IP%.*}
1.2.3
# echo ${IP#*.}
2.3.4
答案 0 :(得分:5)
%.*
删除最后一个八位字节和在之前的点。 #*.
删除第一个八位字节和跟随的点。前面的点与后面的点差异解释了为什么要交换点。
${parameter#word}
${parameter##word}
- 删除匹配的前缀模式。扩展单词以生成模式,就像在路径名扩展中一样。如果模式匹配 参数值的开头,则扩展的结果是参数的扩展值最短 匹配模式(
#
案例)或最长匹配模式(##
案例)已删除。如果参数为@
或*
,则为模式 依次将删除操作应用于每个位置参数,并且扩展是结果列表。如果参数是 使用@
或*
下标的数组变量,模式删除操作依次应用于数组的每个成员, 扩展是最终的清单。
${parameter%word}
${parameter%%word}
- 删除匹配的后缀模式。扩展单词以生成模式,就像在路径名扩展中一样。如果模式匹配 参数的扩展值的尾部,则扩展的结果是参数的扩展值 删除最短匹配模式(
%
个案例)或最长匹配模式(%%
个案)。如果参数为@
或*
,则为 模式删除操作依次应用于每个位置参数,扩展是结果列表。如果参数 下标为@
或*
的数组变量,模式删除操作依次应用于数组的每个成员, 扩展是最终的清单。