%.*
удаляет последний октет и точка, которая предшествует его. #*.
удаляет первый октет и точку, которую следует за. Это предыдущая точка против следующей разности точек, которая объясняет, почему вы меняете точку.
Из bash man page:
${parameter#word}
${parameter##word}
- Удалить соответствующий шаблон префикса. Слово расширяется, чтобы создать шаблон так же, как при расширении пути. Если шаблон соответствует началу значения параметра, то результатом расширения является расширенное значение параметра с самым коротким совпадающим шаблоном (случай
#
) или самый длинный шаблон соответствия (случай ##
). Если параметр равен @
или *
, то в каждый позиционный параметр по очереди применяется шаблон операции , а расширение - это результирующий список. Если параметр представляет собой переменную массива с индексом @
или *
, операция удаления шаблона применяется поочередно к каждому члену массива, а расширение - это результирующий список.
${parameter%word}
${parameter%%word}
- Удалить суффикс соответствие шаблону. Слово расширяется, чтобы создать шаблон так же, как при расширении пути. Если шаблон совпадает с завершающей частью расширенного значения параметра, то результатом расширения является расширенное значение параметра с кратким совпадающим шаблоном (случай
%
) или самый длинный шаблон соответствия (случай %%
). Если параметр равен @
или *
, операция по удалению рисунка применяется к каждому позиционному параметру по очереди, а расширение - это результирующий список. Если параметр является переменной массива с индексом @
или *
, операция удаления шаблона применяется поочередно к каждому члену массива, а расширение является результирующим списком.