If you want to master the shell (it will save years of your life), follow these guides. I highly recommend reading the entire BASH manual, it will answer every question you'll ever have, or at least give you a hint about it, as well as expose you to all the hidden knowledge (some call it "gotchas") you'll wish you knew later.
To find every Unix-y program and get a 1-line description of it (and referenced programs/functions), run:
for i in $(ls /bin/* /usr/bin/* /sbin/* /usr/sbin/* | sed -E 's?.*/??g' | sort -u) ; do
echo "command: $i"
whatis "$(basename "$i")" | cat
echo ""
done | tee command-descriptions.log
View 'command-descriptions.log' with less command-descriptions.log, use arrow-keys and page up/down to navigate, and type 'q' to exit. To find out more about a program like df(1), run man 1 df.
I think looking at some of the documentation for oils (née oil sh) and ysh - as well as [looking at using] these two projects [in place of bash] - is also a good idea today:
You would need to make those double-quotes into single-quotes. Double-quotes will interpolate the $() immediately, running basename before find runs. Single-quotes will not interpolate the $(), so the whole string gets passed to find for it to execute each time
It worked when I tried it. Upon investigation, this is because `basename {}` returns `{}`, which is interpolated; thus the exec just uses the full file paths; but as it turns out, `whatis` works fine with those paths.
It won't work with single quotes because `find` won't do that interpolation when it processes the `-exec` arguments; `whatis` ends up receiving a string with a literal dollar sign etc.
I think the kind of interpolation I originally had in mind isn't possible with `find`. Thankfully it apparently isn't needed (at least with my local `whatis`).