| case | dash | bash | mksh | osh | osh_ALT | description |
| 0 | pass | ok | ok | pass | pass | $- with -c |
| details | details | |||||
| 1 | N-I | ok | ok | pass | pass | $- with pipefail |
| details | details | details | ||||
| 2 | pass | pass | pass | pass | pass | sh -c |
| 3 | pass | pass | pass | pass | pass | empty -c input |
| 4 | pass | pass | pass | pass | pass | empty stdin |
| 5 | pass | pass | pass | pass | pass | args are passed |
| 6 | pass | pass | pass | pass | pass | args that look like flags are passed after script |
| 7 | pass | pass | pass | pass | pass | args that look like flags are passed after -c |
| 8 | pass | pass | pass | pass | pass | pass short options on command line |
| 9 | pass | pass | pass | pass | pass | pass long options on command line |
| 10 | BUG | pass | BUG | pass | pass | can continue after unknown option |
| details | details | |||||
| 11 | pass | pass | pass | pass | pass | set with both options and argv |
| 12 | ok | pass | pass | pass | pass | nounset |
| details | ||||||
| 13 | ok | pass | pass | pass | pass | -u is nounset |
| details | ||||||
| 14 | pass | pass | pass | pass | pass | nounset with "$@" |
| 15 | pass | pass | pass | pass | pass | set -u -- clears argv |
| 16 | pass | pass | pass | pass | pass | set -u -- x y z |
| 17 | pass | pass | pass | pass | pass | reset option with long flag |
| 18 | pass | pass | pass | pass | pass | reset option with short flag |
| 19 | ok | pass | pass | pass | pass | set -eu (flag parsing) |
| details | ||||||
| 20 | pass | pass | pass | FAIL | FAIL | -n for no execution (useful with --ast-output) |
| details | details | |||||
| 21 | pass | pass | pass | FAIL | FAIL | xtrace |
| details | details | |||||
| 22 | pass | pass | pass | pass | pass | errexit aborts early |
| 23 | pass | pass | pass | pass | pass | errexit for nonexistent command |
| 24 | pass | pass | pass | pass | pass | errexit aborts early on pipeline |
| 25 | pass | pass | pass | pass | pass | errexit with { } |
| 26 | pass | pass | pass | pass | pass | errexit with if and { } |
| 27 | pass | pass | pass | pass | pass | errexit with || |
| 28 | pass | pass | pass | pass | pass | errexit with && |
| 29 | pass | pass | pass | pass | pass | errexit test && -- from gen-module-init |
| 30 | pass | pass | pass | pass | pass | errexit test && and fail |
| 31 | pass | pass | pass | pass | pass | errexit and loop |
| 32 | pass | pass | pass | pass | pass | errexit and brace group { } |
| 33 | pass | pass | pass | pass | pass | errexit and time { } |
| 34 | pass | pass | pass | pass | pass | errexit with ! |
| 35 | pass | pass | pass | pass | pass | errexit with ! and ; |
| 36 | pass | pass | pass | pass | pass | errexit with while/until |
| 37 | N-I | pass | pass | pass | pass | errexit with (( )) |
| details | ||||||
| 38 | pass | pass | pass | pass | pass | errexit with subshell |
| 39 | pass | BUG | pass | pass | pass | errexit with command sub |
| details | ||||||
| 40 | BUG | BUG | BUG | pass | pass | errexit with local |
| details | details | details | ||||
| 41 | ok | ok | ok | pass | pass | setting errexit while it's being ignored |
| details | details | details | ||||
| 42 | pass | pass | pass | pass | pass | setting errexit in a subshell works but doesn't affect parent shell |
| 43 | ok | ok | ok | pass | pass | setting errexit while it's being ignored in a subshell |
| details | details | details | ||||
| 44 | pass | pass | pass | pass | pass | errexit double quard |
| 45 | N-I | pass | pass | pass | pass | pipefail |
| details | ||||||
| 46 | N-I | pass | N-I | pass | pass | shopt -p -o |
| details | details | |||||
| 47 | N-I | pass | N-I | pass | pass | shopt -p |
| details | details |
210 passed, 13 ok, 7 known unimplemented, 6 known bugs, 2 failed, 0 skipped
| bash | 0 $- with -c stdout: huBcstderr: |
| mksh | 0 $- with -c stdout: uhcstderr: |
| dash | 1 $- with pipefail stdout: stderr: /bin/dash: 1: set: Illegal option -o pipefail |
| bash | 1 $- with pipefail stdout: huBstderr: |
| mksh | 1 $- with pipefail stdout: ushstderr: |
| dash | 10 can continue after unknown option stdout: stderr: /bin/dash: 2: set: Illegal option -o STRICT |
| mksh | 10 can continue after unknown option stdout: stderr: /bin/mksh: <stdin>[2]: set: STRICT: bad option |
| dash | 12 nounset stdout: []stderr: /bin/dash: 3: unset: parameter not set |
| dash | 13 -u is nounset stdout: []stderr: /bin/dash: 3: unset: parameter not set |
| dash | 19 set -eu (flag parsing) stdout: stderr: /bin/dash: 2: unset: parameter not set |
| osh | 20 -n for no execution (useful with --ast-output) [osh stdout] Expected u'1\n', got '1\n2\n3\n' stdout: 1 2 3stderr: |
| osh_ALT | 20 -n for no execution (useful with --ast-output) [osh_ALT stdout] Expected u'1\n', got '1\n2\n3\n' stdout: 1 2 3stderr: |
| osh | 21 xtrace [osh stderr] Expected '+ echo 2\n', got "+ ['echo', '2']\n" stdout: 1 2stderr: + ['echo', '2'] |
| osh_ALT | 21 xtrace [osh_ALT stderr] Expected '+ echo 2\n', got "+ ['echo', '2']\n" stdout: 1 2stderr: + ['echo', '2'] |
| dash | 37 errexit with (( )) stdout: stderr: /bin/dash: 3: i++: not found |
| bash | 39 errexit with command sub stdout: one twostderr: |
| dash | 40 errexit with local stdout: good badstderr: |
| bash | 40 errexit with local stdout: good badstderr: |
| mksh | 40 errexit with local stdout: good badstderr: |
| dash | 41 setting errexit while it's being ignored stdout: 1 2 3 4 5 6stderr: |
| bash | 41 setting errexit while it's being ignored stdout: 1 2 3 4 5 6stderr: |
| mksh | 41 setting errexit while it's being ignored stdout: 1 2 3 4 5 6stderr: |
| dash | 43 setting errexit while it's being ignored in a subshell stdout: 1 2 3 4 5 6stderr: |
| bash | 43 setting errexit while it's being ignored in a subshell stdout: 1 2 3 4 5 6stderr: |
| mksh | 43 setting errexit while it's being ignored in a subshell stdout: 1 2 3 4 5 6stderr: |
| dash | 45 pipefail stdout: 0stderr: /bin/dash: 3: set: Illegal option -o pipefail |
| dash | 46 shopt -p -o stdout: stderr: /bin/dash: 1: shopt: not found /bin/dash: 3: shopt: not found |
| mksh | 46 shopt -p -o stdout: stderr: /bin/mksh: <stdin>[1]: shopt: not found /bin/mksh: <stdin>[3]: shopt: not found |
| dash | 47 shopt -p stdout: stderr: /bin/dash: 1: shopt: not found /bin/dash: 2: shopt: not found /bin/dash: 3: shopt: not found |
| mksh | 47 shopt -p stdout: stderr: /bin/mksh: <stdin>[1]: shopt: not found /bin/mksh: <stdin>[2]: shopt: not found /bin/mksh: <stdin>[3]: shopt: not found |