igli 1181940997 learn foo=file.control.ext; echo ${foo%.control.*}.${foo##*.} greycat 1295463426 forget greycat 1295463461 learn filename=foobar.ext; extension=${filename#*.}; filename_without_extension=${filename%.*} kerframil 1536690768 forget kerframil 1536690784 learn Given that f has a value of "foo.bar.baz", ${f#*.} will expand to "bar.baz" and ${f##*.} to "baz", whereas ${f%.*} will expand to "foo.bar" and ${f%%.*} to "foo". See also: http://mywiki.wooledge.org/BashFAQ/073