Many times, scripters will use external commands like basename, dirname and tr because they don't realize they can instead use ksh builtins. An added bonus is the builtins are faster and require less system resources because no sub-process is spawned. basename replacement: --------------------- $ fullfile="/some/dir/file.txt" # replaced: file=$(basename $fullfile) $ file=${fullfile##*/} $ echo $file file.txt dirname replacement: -------------------- $ fullfile="/some/dir/file.txt" # replaced: dir=$(dirname $fullfile) $ dir=${fullfile%/*} $ echo $dir /some/dir tr replacements: ---------------- $ word="MiXeD" # replaced: word=$(echo $word | tr [A-Z] [a-z]) $ typeset -l word $ echo $word mixed # replaced: word=$(echo $word | tr [a-z] [A-Z]) $ typeset -u word $ echo $word MIXED