Lessons learned from writing a linter/static analysis tool for shell scripts: https://www.vidarholen.net/contents/blog/?p=859 (Preserve positions, use error codes and document them, and there's a tradeoff between beginner mistakes and advanced mistakes!)