Running whatis for the single character “a” works fine: $ whatis a a.out(5) - format of executable binary files But running whatis with a single dot returns random results. It includes “a.out”, but many manpages which don’t have a ‘.’ in the name $ whatis . | head -8 whatis .|head -8 c++filt(1) - decode C++ symbols w(1) - display who is logged in and what they are doing config.guess-2.69(1) - guess the build system triplet config.sub-2.69(1) - validate and canonicalize a configuration triplet ifnames-2.69(1) - Extract CPP conditionals from a set of files a.out(5) - format of executable binary files rtld, ld-elf.so.1, ld.so(1) - run-time link-editor gittutorial-2(7) - A tutorial introduction to Git: part two
I think it works as intended. As per apropos.1, expressions here are regular expressions as described in re_format.7. So your dot matches any character.
After reading PR223524 I think your expectation is that whatis will not use a regexp since whatis is an alias for apropos -f, and -f is: "Search for all words in expression in manual page names only.". I don't think the manual page is clear on what happens and on top of that I'm not sure what should actually happen.
The problems still exists in FreeBSD-14-current. Calling whatis with the a dot (".") as argument returns 48 hits, but only 24 contains a dot. $ whatis . | wc -l 48 $ whatis . | egrep '\.' | wc -l 24 On debian11 I get: $ whatis . .: nothing appropriate. and on centos8 $ whatis . . (1) - bash built-in commands, see bash(1)
apropos (and by extension whatis) uses (case-insensitive, extended) regular expressions in all instances. In all reported instances, the “.” has matched a “word” containing a single character, as confirmed by $ printf '%s\n' word-to-test | grep -o '\<.\>' The results are as follows: c c++filt w w 2 config.guess-2.69 2 config.sub-2.69 2 ifname-2.69 a a.out 1 ld-elf.so.1 2 gittutorial-2 Note also: $ whatis '[a]' a.out(5) - format of executable binary files In order to search for a manpage entitled “.” alone, you would search $ whatis '[.]' whatis: nothing appropriate To confirm: $ whatis . | wc -l 17 $ whatis . | grep '\<.\>' | wc -l 17