spec test index / oilshell.org
| status | bash | dash | mksh | zsh | osh | |
| pass | 5 | 5 | 7 | 5 | 4 | |
| ok | 0 | 2 | 0 | 0 | 0 | |
| N-I | 0 | 1 | 0 | 0 | 0 | |
| BUG | 3 | 0 | 1 | 3 | 0 | |
| FAIL | 0 | 0 | 0 | 0 | 4 | |
| total | 8 | 8 | 8 | 8 | 8 | |
| case | bash | dash | mksh | zsh | osh | description | 
| 0 | pass | pass | pass | BUG | FAIL | : is special and prefix assignments persist after special builtins | 
| details | details | |||||
| 1 | BUG | pass | pass | pass | pass | readonly is special and prefix assignments persist | 
| details | ||||||
| 2 | pass | pass | pass | pass | pass | true is not special | 
| 3 | BUG | ok | pass | BUG | FAIL | Shift is special and the whole script exits if it returns non-zero | 
| details | details | details | details | |||
| 4 | BUG | ok | pass | pass | FAIL | set is special and fails, even if using || true | 
| details | details | details | ||||
| 5 | pass | pass | BUG | BUG | FAIL | Special builtins can't be redefined as functions | 
| details | details | details | ||||
| 6 | pass | pass | pass | pass | pass | Non-special builtins CAN be redefined as functions | 
| 7 | pass | N-I | pass | pass | pass | command, builtin - both can be redefined, not special (regression) | 
| details | 
26 passed, 2 OK, 1 not implemented, 7 BUG, 4 failed, 0 timeouts, 0 cases skipped 4 failed under osh
| zsh | 0 : is special and prefix assignments persist after special builtins stdout: foo=stderr:  | 
| osh | 0 : is special and prefix assignments persist after special builtins [osh stdout] Expected 'foo=bar\n', got 'foo=\n' stdout: foo=stderr:  | 
| bash | 1 readonly is special and prefix assignments persist stdout: foo=bar spam=eggs bar Nonestderr:  | 
| bash | 3 Shift is special and the whole script exits if it returns non-zero stdout: status=1stderr: bash: line 3: shift: 3: shift count out of range  | 
| dash | 3 Shift is special and the whole script exits if it returns non-zero stdout: stderr: dash: 3: shift: can't shift that many  | 
| zsh | 3 Shift is special and the whole script exits if it returns non-zero stdout: status=1stderr: shift: shift count must be <= $#  | 
| osh | 3 Shift is special and the whole script exits if it returns non-zero [osh stdout] Expected u'', got 'status=1\n' [osh status] Expected 1, got 0 stdout: status=1stderr:  | 
| bash | 4 set is special and fails, even if using || true stdout: ok should not get herestderr: bash: line 1: shopt: invalid_: invalid shell option name bash: line 3: set: invalid_: invalid option name  | 
| dash | 4 set is special and fails, even if using || true stdout: okstderr: dash: 1: shopt: not found dash: 3: set: Illegal option -o invalid_  | 
| osh | 4 set is special and fails, even if using || true [osh stdout] Expected 'ok\n', got 'ok\nshould not get here\n' [osh status] Expected 1, got 0 stdout: ok should not get herestderr: shopt -s invalid_ || true ^~~~~ [ stdin ]:1: 'shopt' got invalid option 'invalid_' set -o invalid_ || true ^~~ [ stdin ]:3: 'set' got invalid option 'invalid_'  | 
| mksh | 5 Special builtins can't be redefined as functions stdout: status=0stderr:  | 
| zsh | 5 Special builtins can't be redefined as functions stdout: status=0stderr:  | 
| osh | 5 Special builtins can't be redefined as functions [osh status] Expected 2, got 0 stdout: status=0stderr:  | 
| dash | 7 command, builtin - both can be redefined, not special (regression) stdout: stderr:  |