删除字符串背后的逻辑是什么?

时间:2014-01-20 16:45:22

标签: linux bash

有人可以解释.**.顺序背后的逻辑吗?当我想从前面移除并从后面移除时,为什么必须换掉它们?

# IP="1.2.3.4"

# echo ${IP%.*}
1.2.3

# echo ${IP#*.}
2.3.4

1 个答案:

答案 0 :(得分:5)

%.*删除最后一个八位字节和之前的点。 #*.删除第一个八位字节和跟随的点。前面的点与后面的点差异解释了为什么要交换点。

来自bash man page

  

${parameter#word}
  ${parameter##word}

     
      
  • 删除匹配的前缀模式。扩展单词以生成模式,就像在路径名扩展中一样。如果模式匹配   参数值的开头,则扩展的结果是参数的扩展值最短      匹配模式(#案例)或最长匹配模式(##案例)已删除。如果参数为@*,则为模式      依次将删除操作应用于每个位置参数,并且扩展是结果列表。如果参数是      使用@*下标的数组变量,模式删除操作依次应用于数组的每个成员,      扩展是最终的清单。
  •   
     

${parameter%word}
  ${parameter%%word}

     
      
  • 删除匹配的后缀模式。扩展单词以生成模式,就像在路径名扩展中一样。如果模式匹配         参数的扩展值的尾部,则扩展的结果是参数的扩展值         删除最短匹配模式(%个案例)或最长匹配模式(%%个案)。如果参数为@*,则为         模式删除操作依次应用于每个位置参数,扩展是结果列表。如果参数         下标为@*的数组变量,模式删除操作依次应用于数组的每个成员,         扩展是最终的清单。
  •