- Use native bash math where doing so improves readability.
- Avoid illegal exit status codes (666 in impossible scenario).
- Avoid useless use of cat (`cat foo | bar` vs the more efficient `bar <foo`).
- Avoid needless echo pipelines (`echo foo | bar` vs `bar <<<"$foo"`).
- Never use a for loop to iterate over output from `find`; `for` loops depend
on string-splitting, which is only available with globbing behavior. See
http://mywiki.wooledge.org/DontReadLinesWithFor
- Use `read -s` to silence feedback rather than playing around with `stty`.
- Use `tput` to retrieve color codes correct for the current terminal rather
than assuming a terminal compatible with ANSI color codes.
- Use a expression compatible with BSD `tr` in "passphrase-shredding" code.
(BTW, I very much doubt that this code actually does any good; it's not a
reasonable expectation that a new string assigned to a variable will actually
be placed at the same location in memory).
- Implementations of `echo` which do anything other than print `-e` on output
when `echo -e` is run are nonconformant with the POSIX spec for echo.
Similarly, `echo -n` behavior is not defined by the standard. Avoid relying
on either of these. (See http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html,
particularly the APPLICATION USAGE section).
- Always quote expansions to prevent string-splitting and glob-expansion
(`"$i"`, not `$i`).
- Avoid `some_command; if [ $? -eq 0 ]; then` when `if some_command; then` can
be used instead.