Join us on Facebook!
— Written by Triangles on October 19, 2015 • updated on December 17, 2015 • ID 20 —
A one-line solution thanks to the Parameter Expansion.
Say you have a variable FULL_PATH that contains the full path of a specific file (for example /path/to/my/file.txt) and you want to keep only the basename (i.e. file.txt). The solution: use the so-called "Parameter Expansion", like that:
FULL_PATH=/path/to/my/file.txt
echo ${FULL_PATH##*/} # prints 'file.txt'
Anytime you use a dollar sign followed by a variable name you are doing the Parameter Expansion. For example echo $FULL_PATH or X=$FULL_PATH. Sometimes the variable is surrounded by braces, e.g. ${FULL_PATH}.bak which, when printed or used is expanded (that's where the expression come from) to /path/to/my/file.txt.bak. In other words, Parameter Expansion refers to any operation that causes a parameter to be replaced by some other content.
The curly-brace tool introduces several syntaxes. We have just used one of those for our basename trimming, which is ${parameter##word}. Here the word part is is a pattern that is used to remove a part of the string parameter, by matching it from the beginning. The operator "##" will try to remove the longest text matching. We used the pattern */, which matches (i.e. removes) anything until the last / encountered.
Bash manual - Shell Parameter Expansion (link)
Linux Journal - Bash Parameter Expansion (link)
Bash Hackers Wiki - Parameter expansion (link)