Nome file senza estensione

Spesso all'interno di script che operano sui file è utile avere il nome file senza estensione. Ad esempio si potrebbe voler salvare un file con una nuova estensione.

filename="/path/subpath/nome.ext"
base=`basename "$filename"`
noext=${base%.*}

La variabile $noext conterrà la stringa "nome". Lo script seguente rinomina tutti i file .doc in .txt.

for F in *doc; do
  base=`basename "$F"`
  noext=${base%.*}
  mv $F $noext.txt
done

Se avessi fatto semplicemente

mv $F $F.txt 

avrei ottenuto nomi file come documento.doc.txt ovvero con la nuova estensione aggiunta alla precedente.