Usar dirname e basename como mencionado por Michael deve ser a maneira mais segura de obter o que você deseja.
De qualquer forma, se você realmente quiser fazer isso com "ferramentas apenas para o bash", poderá usar a substituição de parâmetro:
echo `basename $PWD` # Basename of current working directory.
echo "${PWD##*/}" # Basename of current working directory.
echo
echo `basename $0` # Name of script.
echo $0 # Name of script.
echo "${0##*/}" # Name of script.
echo
filename=test.data
echo "${filename##*.}" # data
# Extension of filename.
Este exemplo é retirado diretamente do Advanced Bash Scripting Guide, que vale uma olhada.
A explicação é bem simples:
$ {var # Pattern} Remova de $ var a parte mais curta de $ Pattern que corresponde ao front end de $ var. $ {var ## Pattern} Remova de $ var a parte mais longa de $ Pattern que corresponde ao front end de $ var.
Observe o padrão como algum regex e o #
ou ##
como algum tipo de modificador ganancioso / não ganancioso.
Isso pode se tornar útil se você precisar fazer algumas extrações mais complicadas de uma parte de caminhos.