What does the curly-brace syntax ${var%.*} mean?
It indicates that parameter expansion will occur.
In this context, it is a parameter substitution.
The ${variable%.*}
notation means take the value of $variable
, strip off the pattern .*
from the tail of the value — mnemonic: percenT has a 't' at the Tail — and give the result. (By contrast, ${variable#xyz}
means remove xyz
from the head of the variable's value — mnemonic: a Hash has an 'h' at the Head.)
Given:
downloadFileName=abc.tar.gz
evaluating extractDir="${downloadFileName%.*}-tmp"
yields the equivalent of:
extractDir="abc.tar-tmp"
The alternative notation with the double %
:
extractDir="${downloadFileName%%.*}-tmp"
would yield the equivalent of:
extractDir="abc-tmp"
The %%
means remove the longest possible tail; correspondingly, ##
means remove the longest matching head.