Uses for this bash filename extraction technique? Uses for this bash filename extraction technique? bash bash

Uses for this bash filename extraction technique?


It gets rid of the filename extension (here: .tif), sample:

$ for A in test.py test.sh test.xml test.xsl; do echo "$A: ${A%%.*}"; donetest.py: testtest.sh: testtest.xml: testtest.xsl: test

from bash manual:

   ${parameter%%word}          The word is expanded to produce a pattern just as in pathname expansion.  If the          pattern matches a trailing portion of the expanded value of parameter, then  the          result  of  the  expansion  is the expanded value of parameter with the shortest          matching pattern (the ``%'' case) or the longest matching  pattern  (the  ``%%''          case) deleted.  If parameter is @ or *, the pattern removal operation is applied          to each positional parameter in turn, and the expansion is the  resultant  list.          If  parameter  is an array variable subscripted with @ or *, the pattern removal          operation is applied to each member of the array in turn, and the  expansion  is          the resultant list.


Here's output from the bash man page

 ${parameter%%word}          The word is expanded to produce a pattern just  as  in  pathname          expansion.   If  the  pattern  matches a trailing portion of the          expanded value of parameter, then the result of the expansion is          the  expanded value of parameter with the shortest matching pat-          tern (the ``%'' case)  or  the  longest  matching  pattern  (the          ``%%''  case)  deleted.   If  parameter  is  @ or *, the pattern          removal operation is applied to  each  positional  parameter  in          turn,  and the expansion is the resultant list.  If parameter is          an array variable subscripted with @ or *, the  pattern  removal          operation  is  applied  to each member of the array in turn, and          the expansion is the resultant list.


Apparently bash has several "Parameter Expansion" tools which include:

Simply substituting the value...

${parameter}

Expanding to a sub-string...

${parameter:offset}${parameter:offset:length}

Substitute the length of the parameters value...

${#parameter}

Expanding upon a match at the beginning of the parameter...

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

Expanding upon a match at the end of the parameter...

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

Expands the parameter to find and replace a string...

${parameter/pattern/string}

These are my interpretation of the parts I think I understand from this section of the man pages. Let me know if I missed something important.