1#From: "Grigoriy Strokin" <grg@philol.msu.ru> 2#Newsgroups: comp.unix.shell 3#Subject: fast basename and dirname functions for BASH/SH 4#Date: Sat, 27 Dec 1997 21:18:40 +0300 5# 6#Please send your comments to grg@philol.msu.ru 7 8function basename() 9{ 10 local name="${1##*/}" 11 echo "${name%$2}" 12} 13 14function dirname() 15{ 16 local dir="${1%${1##*/}}" 17 [ "${dir:=./}" != "/" ] && dir="${dir%?}" 18 echo "$dir" 19} 20 21# Two additional functions: 22# 1) namename prints the basename without extension 23# 2) ext prints extension of a file, including "." 24 25function namename() 26{ 27 local name=${1##*/} 28 local name0="${name%.*}" 29 echo "${name0:-$name}" 30} 31function ext() 32{ 33 local name=${1##*/} 34 local name0="${name%.*}" 35 local ext=${name0:+${name#$name0}} 36 echo "${ext:-.}" 37} 38 39 40 41 42 43 44