status | bash | mksh | ksh | toysh | sush | brush | osh | |
pass | 22 | 18 | 18 | 2 | 14 | 19 | 18 | |
ok | 0 | 2 | 0 | 0 | 0 | 0 | 2 | |
N-I | 1 | 2 | 0 | 0 | 0 | 0 | 2 | |
BUG | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
FAIL | 0 | 0 | 5 | 21 | 9 | 4 | 1 | |
total | 23 | 23 | 23 | 23 | 23 | 23 | 23 | |
case | bash | mksh | ksh | toysh | sush | brush | osh | description |
0 | pass | pass | pass | FAIL | pass | pass | pass | @() matches exactly one of the patterns |
details | ||||||||
1 | pass | pass | pass | FAIL | pass | pass | pass | ?() matches 0 or 1 |
details | ||||||||
2 | pass | pass | pass | FAIL | pass | pass | pass | *() matches 0 or more |
details | ||||||||
3 | pass | pass | pass | FAIL | pass | pass | pass | +() matches 1 or more |
details | ||||||||
4 | pass | pass | pass | FAIL | pass | FAIL | pass | !(*.h|*.cc) to match everything except C++ |
details | details | |||||||
5 | pass | pass | pass | FAIL | pass | pass | pass | Two adjacent alternations |
details | ||||||||
6 | pass | pass | pass | FAIL | pass | pass | pass | Nested extended glob pattern |
details | ||||||||
7 | pass | pass | pass | FAIL | pass | FAIL | pass | Extended glob patterns with spaces |
details | details | |||||||
8 | pass | pass | pass | FAIL | pass | pass | pass | Filenames with spaces |
details | ||||||||
9 | pass | BUG | FAIL | FAIL | pass | pass | pass | nullglob with extended glob |
details | details | details | ||||||
10 | pass | pass | pass | FAIL | FAIL | pass | pass | Glob other punctuation chars (lexer mode) |
details | details | |||||||
11 | pass | pass | pass | FAIL | FAIL | pass | pass | More glob escaping |
details | details | |||||||
12 | pass | pass | pass | FAIL | FAIL | pass | FAIL | Escaping of pipe (glibc bug, see demo/glibc_fnmatch.c) |
details | details | details | ||||||
13 | pass | ok | FAIL | FAIL | pass | pass | ok | Extended glob as argument to ${undef:-} (dynamic globbing) |
details | details | details | details | |||||
14 | pass | ok | FAIL | FAIL | FAIL | pass | ok | Extended glob in assignment builtin |
details | details | details | details | details | ||||
15 | pass | pass | pass | FAIL | FAIL | pass | N-I | Extended glob in same word as array |
details | details | details | ||||||
16 | pass | pass | pass | FAIL | pass | pass | N-I | Extended glob with word splitting |
details | details | |||||||
17 | pass | pass | pass | FAIL | pass | pass | pass | In Array Literal and for loop |
details | ||||||||
18 | pass | pass | pass | FAIL | pass | pass | pass | No extended glob with simple_word_eval (Oil evaluation) |
details | ||||||||
19 | pass | pass | pass | pass | FAIL | pass | pass | no match |
details | ||||||||
20 | N-I | N-I | FAIL | FAIL | FAIL | FAIL | pass | dashglob |
details | details | details | details | details | details | |||
21 | pass | pass | pass | pass | FAIL | pass | pass | noglob |
details | ||||||||
22 | pass | N-I | FAIL | FAIL | FAIL | FAIL | pass | failglob |
details | details | details | details | details |
111 passed, 4 OK, 5 not implemented, 1 BUG, 40 failed, 0 timeouts, 0 cases skipped 1 failed under osh
toysh | 0 @() matches exactly one of the patterns [toysh stdout] Expected 'bar.cc bar.h baz.h foo.cc foo.h\n', got '@(*.cc|*.h)\n' stdout: @(*.cc|*.h)stderr: sh: shopt: No such file or directory |
toysh | 1 ?() matches 0 or 1 [toysh stdout] Expected 'foo. foo.cc foo.h\n', got 'foo.?(cc|h)\n' stdout: foo.?(cc|h)stderr: sh: shopt: No such file or directory |
toysh | 2 *() matches 0 or more [toysh stdout] Expected 'eg1/_ eg1/_One eg1/_OneOne eg1/_OneTwo eg1/_TwoTwo\n' Got 'eg1/_*(One|Two)\n' stdout: eg1/_*(One|Two)stderr: sh: shopt: No such file or directory |
toysh | 3 +() matches 1 or more [toysh stdout] Expected 'eg2/_One eg2/_OneOne eg2/_OneTwo eg2/_TwoTwo\n' Got 'eg2/_+(One|Two)\n' stdout: eg2/_+(One|Two)stderr: sh: shopt: No such file or directory |
toysh | 4 !(*.h|*.cc) to match everything except C++ [toysh stdout] Expected 'extglob2/bar.py extglob2/baz.py extglob2/foo.py\n' Got 'extglob2/!(*.h|*.cc)\n' stdout: extglob2/!(*.h|*.cc)stderr: sh: shopt: No such file or directory |
brush | 4 !(*.h|*.cc) to match everything except C++ [brush stdout] Expected 'extglob2/bar.py extglob2/baz.py extglob2/foo.py\n' Got 'extglob2/!(*.h|*.cc)\n' stdout: extglob2/!(*.h|*.cc)stderr: extglob2/foo.py: not found |
toysh | 5 Two adjacent alternations [toysh stdout] Expected '2/ab 2/ac 2/cb 2/cc\n2/ab 2/ac 2/bb 2/bc 2/cb 2/cc\n2/ab 2/ac\n' Got '2/!(b)@(b|c)\n2/!(b)?@(b|c)\n2/!(b)a@(b|c)\n' stdout: 2/!(b)@(b|c) 2/!(b)?@(b|c) 2/!(b)a@(b|c)stderr: sh: shopt: No such file or directory |
toysh | 6 Nested extended glob pattern [toysh stdout] Expected 'eg6/ab eg6/az\neg6/ac eg6/ad eg6/az\n', got 'eg6/a@(!(c|d))\neg6/a!(@(ab|b*))\n' stdout: eg6/a@(!(c|d)) eg6/a!(@(ab|b*))stderr: sh: shopt: No such file or directory |
toysh | 7 Extended glob patterns with spaces [toysh stdout] Expected "['eg4/a b', 'eg4/foo']\n", got "['eg4/@(a b|foo)']\n" stdout: ['eg4/@(a b|foo)']stderr: sh: shopt: No such file or directory |
brush | 7 Extended glob patterns with spaces [brush stdout] Expected "['eg4/a b', 'eg4/foo']\n", got "['eg4/@(a', 'b|foo)']\n" stdout: ['eg4/@(a', 'b|foo)']stderr: |
toysh | 8 Filenames with spaces [toysh stdout] Expected "['eg5/a bcd', 'eg5/a bde']\n", got "['eg5/a @(bcd|bde|zzz)']\n" stdout: ['eg5/a @(bcd|bde|zzz)']stderr: sh: shopt: No such file or directory |
mksh | 9 nullglob with extended glob stdout: ['eg6/@(no|matches)'] ['eg6/@(no|matches)']stderr: mksh: <stdin>[1]: shopt: not found mksh: <stdin>[4]: shopt: not found |
ksh | 9 nullglob with extended glob [ksh stdout] Expected "['eg6/@(no|matches)']\n[]\n", got "['eg6/@(no|matches)']\n['eg6/@(no|matches)']\n" stdout: ['eg6/@(no|matches)'] ['eg6/@(no|matches)']stderr: E: ksh: <stdin>[1]: shopt: inaccessible or not found E: ksh: <stdin>[4]: shopt: inaccessible or not found |
toysh | 9 nullglob with extended glob [toysh stdout] Expected "['eg6/@(no|matches)']\n[]\n", got "['eg6/@(no|matches)']\n['eg6/@(no|matches)']\n" stdout: ['eg6/@(no|matches)'] ['eg6/@(no|matches)']stderr: sh: shopt: No such file or directory sh: shopt: No such file or directory |
toysh | 10 Glob other punctuation chars (lexer mode) [toysh stdout] Expected "['__#', '__&&', '__<>', '__aa', '__{}']\n" Got "['@(__aa|__<>|__{}|__#|__&&|)']\n" stdout: ['@(__aa|__<>|__{}|__#|__&&|)']stderr: sh: shopt: No such file or directory |
sush | 10 Glob other punctuation chars (lexer mode) [sush stdout] Expected "['__#', '__&&', '__<>', '__aa', '__{}']\n" Got "['__#', '__&&', '__aa', '__{}']\n" stdout: ['__#', '__&&', '__aa', '__{}']stderr: |
toysh | 11 More glob escaping [toysh stdout] Expected "['_*', '_?', '_[:]']\n['_*', '_?', '_[:]']\n" Got "['@(_[:]|_*|_?)']\n['@(nested|_?|@(_[:]|_*))']\n" stdout: ['@(_[:]|_*|_?)'] ['@(nested|_?|@(_[:]|_*))']stderr: sh: shopt: No such file or directory |
sush | 11 More glob escaping [sush stdout] Expected "['_*', '_?', '_[:]']\n['_*', '_?', '_[:]']\n" Got '["@(\'_[:]\'|\'_*\'|\'_?\')"]\n["@(nested|\'_?\'|@(\'_[:]\'|\'_*\'))"]\n' stdout: ["@('_[:]'|'_*'|'_?')"] ["@(nested|'_?'|@('_[:]'|'_*'))"]stderr: |
toysh | 12 Escaping of pipe (glibc bug, see demo/glibc_fnmatch.c) [toysh stdout] Expected "['__|', 'foo']\n['__|', 'foo']\n", got "['@(foo|__||bar)']\n['@(foo|__||bar)']\n" stdout: ['@(foo|__||bar)'] ['@(foo|__||bar)']stderr: sh: shopt: No such file or directory |
sush | 12 Escaping of pipe (glibc bug, see demo/glibc_fnmatch.c) [sush stdout] Expected "['__|', 'foo']\n['__|', 'foo']\n", got '[\'__|\']\n["@(\'foo\'|\'__|\'|bar)"]\n' stdout: ['__|'] ["@('foo'|'__|'|bar)"]stderr: |
osh | 12 Escaping of pipe (glibc bug, see demo/glibc_fnmatch.c) [osh stdout] Expected "['__|', 'foo']\n['__|', 'foo']\n", got "['foo']\n['foo']\n" stdout: ['foo'] ['foo']stderr: |
mksh | 13 Extended glob as argument to ${undef:-} (dynamic globbing) stdout: bar.py foo.py spam.py @(foo|bar).pystderr: mksh: <stdin>[1]: shopt: not found |
ksh | 13 Extended glob as argument to ${undef:-} (dynamic globbing) [ksh stdout] Expected 'bar.py foo.py spam.py\nbar.py foo.py\n', got 'bar.py foo.py spam.py\n@(foo|bar).py\n' stdout: bar.py foo.py spam.py @(foo|bar).pystderr: E: ksh: <stdin>[1]: shopt: inaccessible or not found |
toysh | 13 Extended glob as argument to ${undef:-} (dynamic globbing) [toysh stdout] Expected 'bar.py foo.py spam.py\nbar.py foo.py\n', got 'bar.py spam.py foo.py\n@(foo|bar).py\n' stdout: bar.py spam.py foo.py @(foo|bar).pystderr: sh: shopt: No such file or directory |
osh | 13 Extended glob as argument to ${undef:-} (dynamic globbing) stdout: bar.py foo.py spam.pystderr: echo ${undef:-@(foo|bar).py} ^~ [ stdin ]:9: fatal: Extended glob not allowed in this word |
mksh | 14 Extended glob in assignment builtin stdout: status=1stderr: mksh: <stdin>[1]: shopt: not found mksh: <stdin>[5]: typeset: -@: unknown option |
ksh | 14 Extended glob in assignment builtin [ksh stdout] Expected 'status=2\n', got 'status=1\n' stdout: status=1stderr: E: ksh: <stdin>[1]: shopt: inaccessible or not found E: ksh: <stdin>[5]: typeset: -@: unknown option |
toysh | 14 Extended glob in assignment builtin [toysh stdout] Expected 'status=2\n', got 'status=127\n' stdout: status=127stderr: sh: shopt: No such file or directory sh: typeset: No such file or directory |
sush | 14 Extended glob in assignment builtin [sush stdout] Expected 'status=2\n', got 'status=1\n' stdout: status=1stderr: /home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 5: -@: not found |
osh | 14 Extended glob in assignment builtin stdout: stderr: typeset -@(*.py) myvar ^ [ stdin ]:5: fatal: Extended glob not allowed in this word |
toysh | 15 Extended glob in same word as array [toysh stdout] Expected "['a b', 'c']\n['star', 'glob', 'a b c.py']\n['star', 'extglob', 'a b c.cc', 'a b c.py']\n['at', 'extglob', 'a b', 'cee.cc', 'cee.py']\n" Got "['']\n['star', 'glob', 'bee.py', 'a b c.py', 'cee.py']\n['star', 'extglob', '*@(.py|cc)']\n['at', 'extglob', '*@(.py|cc)']\n" stdout: [''] ['star', 'glob', 'bee.py', 'a b c.py', 'cee.py'] ['star', 'extglob', '*@(.py|cc)'] ['at', 'extglob', '*@(.py|cc)']stderr: sh: shopt: No such file or directory set: bad -- |
sush | 15 Extended glob in same word as array [sush stdout] Expected "['a b', 'c']\n['star', 'glob', 'a b c.py']\n['star', 'extglob', 'a b c.cc', 'a b c.py']\n['at', 'extglob', 'a b', 'cee.cc', 'cee.py']\n" Got "['a b', 'c']\n['star', 'glob', 'a b c.py']\n['star', 'extglob', 'a b c.cc', 'a b c.py']\n['at', 'extglob', 'a b', 'a b c.cc', 'a b c.py', 'bee.cc', 'bee.py', 'cee.cc', 'cee.py']\n" stdout: ['a b', 'c'] ['star', 'glob', 'a b c.py'] ['star', 'extglob', 'a b c.cc', 'a b c.py'] ['at', 'extglob', 'a b', 'a b c.cc', 'a b c.py', 'bee.cc', 'bee.py', 'cee.cc', 'cee.py']stderr: |
osh | 15 Extended glob in same word as array stdout: ['a b', 'c'] ['star', 'glob', 'a b c.py'] ['star', 'extglob', 'a b c.cc', 'a b c.py']stderr: argv.py at extglob "$@"*@(.py|cc) ^ [ stdin ]:13: fatal: Extended globs and arrays can't appear in the same word |
toysh | 16 Extended glob with word splitting [toysh stdout] Expected "['a', 'bar.cc', 'bar.h']\n", got "['a', 'b*.@(cc|h)']\n" stdout: ['a', 'b*.@(cc|h)']stderr: sh: shopt: No such file or directory |
osh | 16 Extended glob with word splitting stdout: ['a b*.@(cc|h)']stderr: |
toysh | 17 In Array Literal and for loop [toysh stdout] Expected 'bar.py\nfoo.py\n---\nzzz bar.py foo.py\n', got '@(fo*|bar).py\n---\n' [toysh status] Expected 0, got 2 stdout: @(fo*|bar).py ---stderr: sh: shopt: No such file or directory main: line 11: sh: syntax error: zzz |
toysh | 18 No extended glob with simple_word_eval (Oil evaluation) [toysh status] Expected 1, got 127 stdout: stderr: sh: shopt: No such file or directory sh: shopt: No such file or directory sh: builtin: No such file or directory sh: builtin: No such file or directory |
sush | 19 no match [sush stdout] Expected '@(__nope__)\n@(__nope__*|__nope__?|*|?|[:alpha:]||)\n' Got "@(__nope__)\n@(__nope__*|__nope__?|'*'|'?'|'[:alpha:]'|'|')\n" stdout: @(__nope__) @(__nope__*|__nope__?|'*'|'?'|'[:alpha:]'|'|')stderr: |
bash | 20 dashglob stdout: -dash bar foo -dash bar foostderr: bash: line 8: shopt: dashglob: invalid shell option name |
mksh | 20 dashglob stdout: -dash bar foo -dash bar foostderr: mksh: <stdin>[1]: shopt: not found mksh: <stdin>[8]: shopt: not found |
ksh | 20 dashglob [ksh stdout] Expected '-dash bar foo\nbar foo\n', got '-dash bar foo\n-dash bar foo\n' stdout: -dash bar foo -dash bar foostderr: E: ksh: <stdin>[1]: shopt: inaccessible or not found E: ksh: <stdin>[8]: shopt: inaccessible or not found |
toysh | 20 dashglob [toysh stdout] Expected '-dash bar foo\nbar foo\n', got '@(*)\n@(*)\n' stdout: @(*) @(*)stderr: sh: shopt: No such file or directory sh: shopt: No such file or directory |
sush | 20 dashglob [sush stdout] Expected '-dash bar foo\nbar foo\n', got '-dash bar foo\n-dash bar foo\n' stdout: -dash bar foo -dash bar foostderr: /home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 8: dashglob: invalid option name |
brush | 20 dashglob [brush stdout] Expected '-dash bar foo\nbar foo\n', got '-dash bar foo\n-dash bar foo\n' stdout: -dash bar foo -dash bar foostderr: shopt: dashglob: invalid shell option name |
sush | 21 noglob [sush stdout] Expected '@(*)\n@(__nope__*|__nope__?|*|?|[:alpha:]||)\n' Got "@(*)\n@(__nope__*|__nope__?|'*'|'?'|'[:alpha:]'|'|')\n" stdout: @(*) @(__nope__*|__nope__?|'*'|'?'|'[:alpha:]'|'|')stderr: |
mksh | 22 failglob stdout: @(*) status=0 foo status=0stderr: mksh: <stdin>[1]: shopt: not found mksh: <stdin>[7]: shopt: not found |
ksh | 22 failglob [ksh stdout] Expected 'status=1\nfoo\nstatus=0\n', got '@(*)\nstatus=0\nfoo\nstatus=0\n' stdout: @(*) status=0 foo status=0stderr: E: ksh: <stdin>[1]: shopt: inaccessible or not found E: ksh: <stdin>[7]: shopt: inaccessible or not found |
toysh | 22 failglob [toysh stdout] Expected 'status=1\nfoo\nstatus=0\n', got '@(*)\nstatus=0\n@(*)\nstatus=0\n' stdout: @(*) status=0 @(*) status=0stderr: sh: shopt: No such file or directory sh: shopt: No such file or directory |
sush | 22 failglob [sush stdout] Expected 'status=1\nfoo\nstatus=0\n', got '@(*)\nstatus=0\nfoo\nstatus=0\n' stdout: @(*) status=0 foo status=0stderr: /home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 7: shopt: failglob: not supported yet |
brush | 22 failglob [brush stdout] Expected 'status=1\nfoo\nstatus=0\n', got '@(*)\nstatus=0\nfoo\nstatus=0\n' stdout: @(*) status=0 foo status=0stderr: |