Shell Style Guide
Quick Start
Apply these requirements for any shell work:
- ShellCheck must pass with zero errors.
- Format with shfmt based on shell type.
- Use braces for variable expansion (
${var}). - Keep
scripts/lib*.shPOSIX sh compatible.
Commands
- Bash file:
shfmt -i 4 -ci -bn -sr -w <file>shellcheck -s bash <file>
- POSIX sh file:
shfmt -p -i 4 -ci -bn -sr -w <file>shellcheck -s sh <file>
- Library file:
shfmt -p -i 4 -ci -bn -sr -w scripts/lib_example.shshellcheck -s sh -x scripts/lib_example.sh
Core Rules
- Use
#!/bin/bashfor executables unless strict POSIX compatibility is required. - Use
#!/bin/shforscripts/lib*.sh. - Do not use Bash-only features in POSIX sh (
local, arrays,[[ ]], process substitution). - Quote expansions and use explicit error handling (
set -euo pipefailfor Bash,set -eufor POSIX). - For POSIX sh helper variables in non-library scripts, use single underscore namespacing.
Detailed Reference
For the complete Tracee shell style details, see reference.md.