## POSIX compliant function to replace basename _basename() { case $1 in --) shift ;; esac fn_path=$1 fn_suffix=$2 _BASENAME= case $fn_path in ## The spec says: "If string is a null string, it is ## unspecified whether the resulting string is '.' or a ## null string. This implementation returns a null string "") return ;; *) fn_path=${fn_path%"${fn_path##*[!/]}"} ## strip trailing slashes case $fn_path in "") fn_path="/" ;; *) fn_path=${fn_path##*/} ;; esac ;; esac case $fn_path in $fn_suffix | "/" ) _BASENAME="$fn_path" ;; *) _BASENAME=${fn_path%$fn_suffix} esac } basename() { _basename "$@" && printf "%s\n" "$_BASENAME" }