spec test index / oilshell.org
| status | dash | bash | mksh | zsh | ash | osh | |
| pass | 9 | 27 | 20 | 21 | 20 | 27 | |
| ok | 2 | 0 | 3 | 3 | 0 | 0 | |
| N-I | 14 | 0 | 1 | 0 | 3 | 0 | |
| BUG | 2 | 0 | 3 | 3 | 4 | 0 | |
| total | 27 | 27 | 27 | 27 | 27 | 27 | |
| case | dash | bash | mksh | zsh | ash | osh | description | 
| 0 | pass | pass | pass | BUG | pass | pass | echo dashes | 
| details | |||||||
| 1 | BUG | pass | BUG | BUG | pass | pass | echo backslashes | 
| details | details | details | |||||
| 2 | N-I | pass | pass | pass | pass | pass | echo -e backslashes | 
| details | |||||||
| 3 | pass | pass | ok | ok | pass | pass | echo builtin should disallow typed args - literal | 
| details | details | ||||||
| 4 | pass | pass | ok | ok | pass | pass | echo builtin should disallow typed args - variable | 
| details | details | ||||||
| 5 | N-I | pass | pass | pass | pass | pass | echo -en | 
| details | |||||||
| 6 | ok | pass | ok | ok | pass | pass | echo -ez (invalid flag) | 
| details | details | details | |||||
| 7 | pass | pass | pass | pass | pass | pass | echo -e with embedded newline | 
| 8 | pass | pass | pass | pass | pass | pass | echo -e line continuation | 
| 9 | N-I | pass | pass | pass | pass | pass | echo -e with C escapes | 
| details | |||||||
| 10 | N-I | pass | pass | pass | pass | pass | echo -e with whitespace C escapes | 
| details | |||||||
| 11 | N-I | pass | pass | pass | pass | pass | \0 | 
| details | |||||||
| 12 | pass | pass | N-I | pass | pass | pass | \c stops processing input | 
| details | |||||||
| 13 | N-I | pass | pass | pass | pass | pass | echo -e with hex escape | 
| details | |||||||
| 14 | pass | pass | pass | pass | pass | pass | echo -e with octal escape | 
| 15 | N-I | pass | pass | pass | N-I | pass | echo -e with 4 digit unicode escape | 
| details | details | ||||||
| 16 | N-I | pass | pass | pass | N-I | pass | echo -e with 8 digit unicode escape | 
| details | details | ||||||
| 17 | N-I | pass | pass | pass | pass | pass | \0377 is the highest octal byte | 
| details | |||||||
| 18 | N-I | pass | pass | pass | BUG | pass | \0400 is one more than the highest octal byte | 
| details | details | ||||||
| 19 | pass | pass | BUG | pass | BUG | pass | \0777 is out of range | 
| details | details | ||||||
| 20 | N-I | pass | pass | pass | pass | pass | incomplete hex escape | 
| details | |||||||
| 21 | N-I | pass | BUG | BUG | pass | pass | \x | 
| details | details | details | |||||
| 22 | pass | pass | pass | pass | pass | pass | incomplete octal escape | 
| 23 | N-I | pass | pass | pass | BUG | pass | incomplete unicode escape | 
| details | details | ||||||
| 24 | N-I | pass | pass | pass | N-I | pass | \u6 | 
| details | details | ||||||
| 25 | BUG | pass | pass | pass | BUG | pass | \0 \1 \8 | 
| details | details | ||||||
| 26 | ok | pass | pass | pass | pass | pass | echo to redirected directory is an error | 
| details | 
124 passed, 8 OK, 18 not implemented, 12 BUG, 0 failed, 0 timeouts, 0 cases skipped
| zsh | 0 echo dashes stdout: -- ---stderr:  | 
| dash | 1 echo backslashes stdout: \ \ \ \stderr:  | 
| mksh | 1 echo backslashes stdout: \ \ \ \stderr:  | 
| zsh | 1 echo backslashes stdout: \ \ \ \stderr:  | 
| dash | 2 echo -e backslashes stdout: -e \ -e \ -e \ -e \ -e \ line2stderr:  | 
| mksh | 3 echo builtin should disallow typed args - literal stdout: stderr: mksh: <stdin>[1]: syntax error: '42' unexpected  | 
| zsh | 3 echo builtin should disallow typed args - literal stdout: stderr: zsh: no matches found: (42)  | 
| mksh | 4 echo builtin should disallow typed args - variable stdout: stderr: mksh: <stdin>[1]: var: not found mksh: <stdin>[2]: syntax error: 'x' unexpected  | 
| zsh | 4 echo builtin should disallow typed args - variable stdout: stderr: zsh: command not found: var zsh: no matches found: (x)  | 
| dash | 5 echo -en stdout: -en abc defstderr:  | 
| dash | 6 echo -ez (invalid flag) stdout: -ez abcstderr:  | 
| mksh | 6 echo -ez (invalid flag) stdout: -ez abcstderr:  | 
| zsh | 6 echo -ez (invalid flag) stdout: -ez abcstderr:  | 
| dash | 9 echo -e with C escapes stdout: -e \d\estderr:  | 
| dash | 10 echo -e with whitespace C escapes stdout: -estderr:  | 
| dash | 11 \0 stdout: -e ab cdstderr:  | 
| mksh | 12 \c stops processing input stdout: xy abde zzzstderr:  | 
| dash | 13 echo -e with hex escape stdout: -e abcd\x65fstderr:  | 
| dash | 15 echo -e with 4 digit unicode escape stdout: abcd\u0065fstderr:  | 
| ash | 15 echo -e with 4 digit unicode escape stdout: abcd\u0065fstderr:  | 
| dash | 16 echo -e with 8 digit unicode escape stdout: abcd\U00000065fstderr:  | 
| ash | 16 echo -e with 8 digit unicode escape stdout: abcd\U00000065fstderr:  | 
| dash | 17 \0377 is the highest octal byte stdout: 2d 65 6e 20 ff 37 0astderr:  | 
| dash | 18 \0400 is one more than the highest octal byte stdout: 2d 65 6e 20 00 30 0astderr:  | 
| ash | 18 \0400 is one more than the highest octal byte stdout: 20 30 30stderr:  | 
| mksh | 19 \0777 is out of range stdout: c3 bfstderr:  | 
| ash | 19 \0777 is out of range stdout: 3f 37stderr:  | 
| dash | 20 incomplete hex escape stdout: - e n a b c d \ x 6 \nstderr:  | 
| dash | 21 \x stdout: - e \ x \ x g \nstderr:  | 
| mksh | 21 \x stdout: \0 \0 g \nstderr:  | 
| zsh | 21 \x stdout: \0 \0 g \nstderr:  | 
| dash | 23 incomplete unicode escape stdout: - e n a b c d \ u 0 0 6 \nstderr:  | 
| ash | 23 incomplete unicode escape stdout: a b c d \ u 0 0 6stderr:  | 
| dash | 24 \u6 stdout: \ u 6stderr:  | 
| ash | 24 \u6 stdout: \ u 6stderr:  | 
| dash | 25 \0 \1 \8 stdout: \0 001 \ 8stderr:  | 
| ash | 25 \0 \1 \8 stdout: \0 001 \ 8stderr:  | 
| dash | 26 echo to redirected directory is an error stdout: status=2 status=2stderr: dash: 3: cannot create ./dir: Is a directory dash: 5: cannot create ./dir: Is a directory  |