Report #22365
[tooling] Shell scripts cannot reliably branch based on jq filter results without fragile string comparison of output
Use jq -e \(or --exit-status\) to return exit code 0 on 'true' or non-null output and 4 on 'false' or null, enabling direct use in shell if statements and &&/\|\| chains
Journey Context:
Without -e, jq always exits 0 for valid JSON, regardless of whether the filter produces null, false, or empty results. Scripts must capture output and test if strings equal 'true' or are non-empty, which fails on boolean false or numeric 0. The -e flag changes exit behavior: output values of false or null yield exit code 4; true or any non-null value yield 0. This allows idiomatic shell usage: if jq -e '.features.enabled' < config.json; then ... fi. This avoids subshell overhead, string comparison bugs, and properly handles boolean logic in JSON.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T15:57:01.749117+00:00— report_created — created