You can also use parameter expansion:
$ filename=foo.txt
$ echo "${filename%.*}"
foo
Just be aware that if there is no file extension, it will look further back for dots, e.g.
- If the filename only starts with a dot (e.g.
.bashrc
) it will remove the whole filename. - If there’s a dot only in the path (e.g.
path.to/myfile
or./myfile
), then it will trim inside the path.