A long time ago, the builds of Tcl and Tk used to work in the way you describe. It was changed to the current system (putting the version number in the name) to allow multiple versions to coexist more smoothly; this was a very strong demand from the user community at the time.
Symlink the version-less filenames to the real ones (or use the mechanism of your distribution) if you want to give up control over which version to use. Alternatively, use this (fairly horrible) piece of mixed shell/Tcl code at the top of your files:
#!/bin/sh
# Try with a versionless name \
exec tclsh "$0" ${1+"$@"}
# Otherwise, try with tclsh8.6 \
exec tclsh8.6 "$0" ${1+"$@"}
# Otherwise, try with tclsh8.5 \
exec tclsh8.5 "$0" ${1+"$@"}
# Otherwise, try with tclsh8.4 \
exec tclsh8.4 "$0" ${1+"$@"}
# Otherwise... well... give up! \
echo "no suitable Tcl interpreter" >&1; exit 1
This relies on the fact that Tcl, unlike the Unix shell, treats a \
at the end of a comment line as meaning that the comment extends onto the next line.
(Myself? I don't usually put in #!
lines these days; I don't consider it an imposition to write tclsh8.5 myscript.tcl
.)