For it's always a pain to remember bash wizardry by heart, here's a piece of usefull information collected on the web.
From: "Grigoriy Strokin" <grg@philol.msu.ru> Newsgroups: comp.unix.shell Subject: fast basename and dirname functions for BASH/SH Date: Sat, 27 Dec 1997 21:18:40 +0300
Please send your comments to grg@philol.msu.ru
function basename()
{
local name="${1##*/}"
echo "${name%$2}"
}
function dirname()
{
local dir="${1%${1##*/}}"
"${dir:=./}" != "/" && dir="${dir%?}"
echo "$dir"
}
# Two additional functions:
# 1) namename prints the basename without extension
# 2) ext prints extension of a file, including "."
function namename()
{
local name=${1##*/}
local name0="${name%.*}"
echo "${name0:-$name}"
}
function ext()
{
local name=${1##*/}
local name0="${name%.*}"
local ext=${name0:+${name#$name0}}
echo "${ext:-.}"
}