I was reviewing some of my old code and came across this syntax:
extractDir=\"${downloadFileName%.*}-tmp\"
The only information I found sea
It is used when expanding an environment variable adjacent to some text that is not the variable, so the shell does not include all of it in the variable name.
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.
It indicates that parameter expansion will occur.