| status | bash | dash | ash | zsh | mksh | ksh | toysh | sush | brush | osh | |
| pass | 27 | 9 | 20 | 21 | 20 | 21 | 14 | 19 | 23 | 27 | |
| ok | 0 | 2 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0 | |
| N-I | 0 | 14 | 3 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
| BUG | 0 | 2 | 4 | 3 | 3 | 0 | 0 | 0 | 0 | 0 | |
| FAIL | 0 | 0 | 0 | 0 | 0 | 6 | 13 | 8 | 4 | 0 | |
| total | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | |
| case | bash | dash | ash | zsh | mksh | ksh | toysh | sush | brush | osh | description |
| 0 | pass | pass | pass | BUG | pass | pass | FAIL | pass | pass | pass | echo dashes |
| details | details | ||||||||||
| 1 | pass | BUG | pass | BUG | BUG | FAIL | pass | pass | pass | pass | echo backslashes |
| details | details | details | details | ||||||||
| 2 | pass | N-I | pass | pass | pass | pass | pass | FAIL | pass | pass | echo -e backslashes |
| details | details | ||||||||||
| 3 | pass | pass | pass | ok | ok | FAIL | pass | pass | pass | pass | echo builtin should disallow typed args - literal |
| details | details | details | |||||||||
| 4 | pass | pass | pass | ok | ok | FAIL | pass | pass | pass | pass | echo builtin should disallow typed args - variable |
| details | details | details | |||||||||
| 5 | pass | N-I | pass | pass | pass | pass | pass | pass | pass | pass | echo -en |
| details | |||||||||||
| 6 | pass | ok | pass | ok | ok | FAIL | pass | pass | pass | pass | echo -ez (invalid flag) |
| details | details | details | details | ||||||||
| 7 | pass | pass | pass | pass | pass | pass | FAIL | pass | pass | pass | echo -e with embedded newline |
| details | |||||||||||
| 8 | pass | pass | pass | pass | pass | pass | FAIL | FAIL | pass | pass | echo -e line continuation |
| details | details | ||||||||||
| 9 | pass | N-I | pass | pass | pass | pass | pass | pass | pass | pass | echo -e with C escapes |
| details | |||||||||||
| 10 | pass | N-I | pass | pass | pass | pass | pass | pass | pass | pass | echo -e with whitespace C escapes |
| details | |||||||||||
| 11 | pass | N-I | pass | pass | pass | pass | pass | FAIL | pass | pass | \0 |
| details | details | ||||||||||
| 12 | pass | pass | pass | pass | N-I | FAIL | FAIL | FAIL | pass | pass | \c stops processing input |
| details | details | details | details | ||||||||
| 13 | pass | N-I | pass | pass | pass | pass | pass | pass | pass | pass | echo -e with hex escape |
| details | |||||||||||
| 14 | pass | pass | pass | pass | pass | pass | FAIL | pass | pass | pass | echo -e with octal escape |
| details | |||||||||||
| 15 | pass | N-I | N-I | pass | pass | pass | FAIL | pass | pass | pass | echo -e with 4 digit unicode escape |
| details | details | details | |||||||||
| 16 | pass | N-I | N-I | pass | pass | pass | FAIL | pass | pass | pass | echo -e with 8 digit unicode escape |
| details | details | details | |||||||||
| 17 | pass | N-I | pass | pass | pass | pass | FAIL | FAIL | FAIL | pass | \0377 is the highest octal byte |
| details | details | details | details | ||||||||
| 18 | pass | N-I | BUG | pass | pass | pass | FAIL | FAIL | FAIL | pass | \0400 is one more than the highest octal byte |
| details | details | details | details | details | |||||||
| 19 | pass | pass | BUG | pass | BUG | FAIL | FAIL | FAIL | FAIL | pass | \0777 is out of range |
| details | details | details | details | details | details | ||||||
| 20 | pass | N-I | pass | pass | pass | pass | pass | pass | pass | pass | incomplete hex escape |
| details | |||||||||||
| 21 | pass | N-I | pass | BUG | BUG | pass | pass | pass | FAIL | pass | \x |
| details | details | details | details | ||||||||
| 22 | pass | pass | pass | pass | pass | pass | FAIL | pass | pass | pass | incomplete octal escape |
| details | |||||||||||
| 23 | pass | N-I | BUG | pass | pass | pass | pass | pass | pass | pass | incomplete unicode escape |
| details | details | ||||||||||
| 24 | pass | N-I | N-I | pass | pass | pass | FAIL | pass | pass | pass | \u6 |
| details | details | details | |||||||||
| 25 | pass | BUG | BUG | pass | pass | pass | FAIL | FAIL | pass | pass | \0 \1 \8 |
| details | details | details | details | ||||||||
| 26 | pass | ok | pass | pass | pass | pass | pass | pass | pass | pass | echo to redirected directory is an error |
| details |
201 passed, 8 OK, 18 not implemented, 12 BUG, 31 failed, 0 timeouts, 0 cases skipped
| zsh | 0 echo dashes stdout: -- ---stderr: |
| toysh | 0 echo dashes [toysh stdout] Expected '-\n--\n---\n' Got '-\n\n---\n' stdout: - ---stderr: |
| dash | 1 echo backslashes stdout: \ \ \ \stderr: |
| zsh | 1 echo backslashes stdout: \ \ \ \stderr: |
| mksh | 1 echo backslashes stdout: \ \ \ \stderr: |
| ksh | 1 echo backslashes [ksh stdout] Expected '\\\n\\\n\\\\\n\\\n' Got '\\\n\\\n\\\n\\\n' stdout: \ \ \ \stderr: |
| dash | 2 echo -e backslashes stdout: -e \ -e \ -e \ -e \ -e \ line2stderr: |
| sush | 2 echo -e backslashes [sush stdout] Expected '\\\n\\\n\\\n\\\n\n\\\nline2\n' Got '\\\n\\\n\\\n\\\n\n\\\nlin\n' stdout: \ \ \ \ \ linstderr: |
| zsh | 3 echo builtin should disallow typed args - literal stdout: stderr: zsh: no matches found: (42) |
| mksh | 3 echo builtin should disallow typed args - literal stdout: stderr: mksh: <stdin>[1]: syntax error: '42' unexpected |
| ksh | 3 echo builtin should disallow typed args - literal [ksh status] Expected 2 Got 1 stdout: stderr: E: ksh: <stdin>[1]: syntax error: unexpected '42' |
| zsh | 4 echo builtin should disallow typed args - variable stdout: stderr: zsh: command not found: var zsh: no matches found: (x) |
| mksh | 4 echo builtin should disallow typed args - variable stdout: stderr: mksh: <stdin>[1]: var: not found mksh: <stdin>[2]: syntax error: 'x' unexpected |
| ksh | 4 echo builtin should disallow typed args - variable [ksh status] Expected 2 Got 1 stdout: stderr: E: ksh: <stdin>[1]: var: inaccessible or not found E: ksh: <stdin>[2]: syntax error: unexpected 'x' |
| dash | 5 echo -en stdout: -en abc defstderr: |
| dash | 6 echo -ez (invalid flag) stdout: -ez abcstderr: |
| zsh | 6 echo -ez (invalid flag) stdout: -ez abcstderr: |
| mksh | 6 echo -ez (invalid flag) stdout: -ez abcstderr: |
| ksh | 6 echo -ez (invalid flag) [ksh stdout] Expected '-ez abc\\n\n' Got '-ez abc\n\n' stdout: -ez abcstderr: |
| toysh | 7 echo -e with embedded newline [toysh stdout] Expected 'foo\nbar\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| toysh | 8 echo -e line continuation [toysh stdout] Expected 'foo\\\nbar\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| sush | 8 echo -e line continuation [sush stdout] Expected 'foo\\\nbar\n' Got 'foo\\\nb\n' stdout: foo\ bstderr: |
| 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: |
| sush | 11 \0 [sush stdout] Expected u'ab\x00cd\n' Got '' [sush status] Expected 0 Got -6 stdout: stderr: thread 'main' panicked at src/utils/c_string.rs:28:35: called `Result::unwrap()` on an `Err` value: NulError(2, [97, 98, 0, 99, 100]) note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace |
| mksh | 12 \c stops processing input stdout: xy abde zzzstderr: |
| ksh | 12 \c stops processing input [ksh stdout] Expected u'xy ab' Got 'xy abde zzz' stdout: xy abde zzzstderr: |
| toysh | 12 \c stops processing input [toysh stdout] Expected u'xy ab' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| sush | 12 \c stops processing input [sush stdout] Expected u'xy ab' Got 'xy ab\x04e zzz\n' stdout: xy abe zzzstderr: |
| dash | 13 echo -e with hex escape stdout: -e abcd\x65fstderr: |
| toysh | 14 echo -e with octal escape [toysh stdout] Expected 'abcd$e\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| dash | 15 echo -e with 4 digit unicode escape stdout: abcd\u0065fstderr: |
| ash | 15 echo -e with 4 digit unicode escape stdout: abcd\u0065fstderr: |
| toysh | 15 echo -e with 4 digit unicode escape [toysh stdout] Expected 'abcdef\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| dash | 16 echo -e with 8 digit unicode escape stdout: abcd\U00000065fstderr: |
| ash | 16 echo -e with 8 digit unicode escape stdout: abcd\U00000065fstderr: |
| toysh | 16 echo -e with 8 digit unicode escape [toysh stdout] Expected 'abcdef\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| dash | 17 \0377 is the highest octal byte stdout: 2d 65 6e 20 ff 37 0astderr: |
| toysh | 17 \0377 is the highest octal byte [toysh stdout] Expected ' ff 37\n' Got ' c3 bf 37\n' stdout: c3 bf 37stderr: |
| sush | 17 \0377 is the highest octal byte [sush stdout] Expected ' ff 37\n' Got ' 1f 37 37\n' stdout: 1f 37 37stderr: |
| brush | 17 \0377 is the highest octal byte [brush stdout] Expected ' ff 37\n' Got ' ef bf bd 37\n' stdout: ef bf bd 37stderr: |
| 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: |
| toysh | 18 \0400 is one more than the highest octal byte [toysh stdout] Expected ' 00 30\n' Got ' c4 80 30\n' stdout: c4 80 30stderr: |
| sush | 18 \0400 is one more than the highest octal byte [sush stdout] Expected ' 00 30\n' Got ' 20 30 30\n' stdout: 20 30 30stderr: |
| brush | 18 \0400 is one more than the highest octal byte [brush stdout] Expected ' 00 30\n' Got '' stdout: stderr: [31merror:[39m echo: failed to parse integer |
| ash | 19 \0777 is out of range stdout: 3f 37stderr: |
| mksh | 19 \0777 is out of range stdout: c3 bfstderr: |
| ksh | 19 \0777 is out of range [ksh stdout] Expected ' ff\n' Got ' c3 bf\n' stdout: c3 bfstderr: |
| toysh | 19 \0777 is out of range [toysh stdout] Expected ' ff\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| sush | 19 \0777 is out of range [sush stdout] Expected ' ff\n' Got ' 3f 37\n' stdout: 3f 37stderr: |
| brush | 19 \0777 is out of range [brush stdout] Expected ' ff\n' Got '' stdout: stderr: [31merror:[39m echo: failed to parse integer |
| dash | 20 incomplete hex escape stdout: - e n a b c d \ x 6 \nstderr: |
| dash | 21 \x stdout: - e \ x \ x g \nstderr: |
| zsh | 21 \x stdout: \0 \0 g \nstderr: |
| mksh | 21 \x stdout: \0 \0 g \nstderr: |
| brush | 21 \x [brush stdout] Expected ' \\ x \\ x g \\n\n' Got ' \\ \\ \\ \\ g \\n\n' stdout: \ \ \ \ g \nstderr: |
| toysh | 22 incomplete octal escape [toysh stdout] Expected ' a b c d 004\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| 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: |
| toysh | 24 \u6 [toysh stdout] Expected ' 006\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| dash | 25 \0 \1 \8 stdout: \0 001 \ 8stderr: |
| ash | 25 \0 \1 \8 stdout: \0 001 \ 8stderr: |
| toysh | 25 \0 \1 \8 [toysh stdout] Expected ' \\0 \\ 1 \\ 8\n' Got '' [toysh status] Expected 0 Got -6 stdout: stderr: munmap_chunk(): invalid pointer |
| sush | 25 \0 \1 \8 [sush stdout] Expected ' \\0 \\ 1 \\ 8\n' Got '' stdout: stderr: thread 'main' panicked at src/utils/c_string.rs:28:35: called `Result::unwrap()` on an `Err` value: NulError(0, [0]) note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace Pid: Pid(693383), Signal: SIGABRT |
| 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 |