178 passed, 18 OK, 27 not implemented, 7 BUG, 4 failed, 0 timeouts, 0 cases skipped 4 failed under osh
mksh | 0 nounset / set -u with empty array (bug in bash 4.3, fixed in 4.4) stdout: stderr: mksh: <stdin>[3]: empty[@]: parameter not set |
mksh | 1 local array stdout: stderr: mksh: <stdin>[2]: syntax error: '(' unexpected |
osh | 2 Command with with word splitting in array [osh stdout] Expected "['1 2', '3', '4']\n", got '' [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1821, in _Dispatch status = self._DoShAssignment(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1177, in _DoShAssignment rhs = self.word_ev.EvalRhsWord(pair.rhs) File "/home/uke/oil/osh/word_eval.py", line 2173, in EvalRhsWord for v in self.EvalWordSequence(words): File "/home/uke/oil/osh/word_eval.py", line 2592, in EvalWordSequence cmd_val = self.EvalWordSequence2(words, False) File "/home/uke/oil/osh/word_eval.py", line 2529, in EvalWordSequence2 self._EvalWordToParts(w, part_vals, EXTGLOB_FILES) File "/home/uke/oil/osh/word_eval.py", line 1983, in _EvalWordToParts self._EvalWordPart(p, word_part_vals, eval_flags) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
mksh | 3 space before ( in array initialization stdout: 1stderr: |
mksh | 5 array with invalid token stdout: stderr: mksh: <stdin>[3]: syntax error: '&' unexpected |
mksh | 9 Negative index stdout: ['', '', '']stderr: |
mksh | 10 Negative index and sparse array stdout: 0 2 3 -1 -2 -3 -4 -5 0 2 3 0 0 2 3 42stderr: |
mksh | 11 Negative index and sparse array stdout: 0 0 1 1 2 2 3 3stderr: |
mksh | 12 Length after unset stdout: len=4 len=4stderr: |
osh | 15 Retrieve index that is a command sub [osh stdout] Expected "['2 3']\n", got '' [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1811, in _Dispatch status = self._DoSimple(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1054, in _DoSimple allow_assign=True) File "/home/uke/oil/osh/word_eval.py", line 2529, in EvalWordSequence2 self._EvalWordToParts(w, part_vals, EXTGLOB_FILES) File "/home/uke/oil/osh/word_eval.py", line 1983, in _EvalWordToParts self._EvalWordPart(p, word_part_vals, eval_flags) File "/home/uke/oil/osh/word_eval.py", line 1867, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/uke/oil/osh/word_eval.py", line 1388, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, QUOTED) File "/home/uke/oil/osh/word_eval.py", line 1891, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/uke/oil/osh/word_eval.py", line 1596, in _EvalBracedVarSub val = self._EvalBracketOp(val, part, quoted, vsub_state, vtest_place) File "/home/uke/oil/osh/word_eval.py", line 1459, in _EvalBracketOp val = self._ArrayIndex(val, part, vtest_place) File "/home/uke/oil/osh/word_eval.py", line 1322, in _ArrayIndex big_index = self.arith_ev.EvalToBigInt(anode) File "/home/uke/oil/osh/sh_expr_eval.py", line 557, in EvalToBigInt val = self.Eval(node) File "/home/uke/oil/osh/sh_expr_eval.py", line 609, in Eval return self.word_ev.EvalWordToString(w) File "/home/uke/oil/osh/word_eval.py", line 2097, in EvalWordToString self._EvalWordPart(p, part_vals, 0) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
mksh | 18 ${!a[1]} is named ref in bash stdout: ['a[1]']stderr: |
mksh | 19 ${!a} on array stdout: ['a']stderr: |
bash | 26 strict_array prevents exporting array stdout: Nonestderr: bash: line 1: shopt: strict_array: invalid shell option name |
mksh | 26 strict_array prevents exporting array stdout: Nonestderr: mksh: <stdin>[1]: shopt: not found |
bash | 27 Arrays can't be used as env bindings stdout: a (b b)stderr: |
mksh | 27 Arrays can't be used as env bindings stdout: stderr: mksh: <stdin>[1]: syntax error: '(' unexpected |
bash | 28 Associative arrays can't be used as env bindings either stdout: a ([k]=v)stderr: |
mksh | 28 Associative arrays can't be used as env bindings either stdout: stderr: mksh: <stdin>[1]: syntax error: '(' unexpected |
bash | 32 Set array item to array stdout: status=1stderr: bash: line 2: a[0]: cannot assign list to array member |
mksh | 32 Set array item to array stdout: stderr: mksh: <stdin>[2]: set: a[0]: is not an identifier |
mksh | 33 Slice of array with [@] stdout: stderr: mksh: <stdin>[2]: ${a[@]: 1:2}: bad substitution |
mksh | 34 Negative slice begin stdout: stderr: mksh: <stdin>[2]: ${a[@]: (-4)}: bad substitution |
mksh | 36 Slice with arithmetic stdout: stderr: mksh: <stdin>[3]: ${a[@]:i-4:2}: bad substitution |
bash | 42 Array syntax in wrong place stdout: stderr: bash: line 1: syntax error near unexpected token `(' bash: line 1: `ls foo=(1 2)' |
mksh | 44 Stripping a whole array unquoted stdout: stderr: mksh: <stdin>[2]: ${files[@]%.c}: bad substitution |
mksh | 45 Stripping a whole array quoted stdout: stderr: mksh: <stdin>[2]: ${files[@]%.c}: bad substitution |
bash | 46 Multiple subscripts not allowed stdout: stderr: bash: line 2: ${a[0][0]}: bad substitution |
mksh | 46 Multiple subscripts not allowed stdout: stderr: mksh: <stdin>[2]: ${a[0][0]}: bad substitution |
bash | 47 Length op, index op, then transform op is not allowed stdout: stderr: bash: line 2: ${#a[0]/1/xxx}: bad substitution |
mksh | 47 Length op, index op, then transform op is not allowed stdout: stderr: mksh: <stdin>[2]: ${#a[0]/1/xxx}: bad substitution |
bash | 49 ${mystr[@]} and ${mystr[*]} disallowed with strict_array stdout: abc status=0 abc status=0stderr: bash: line 1: shopt: strict_array: invalid shell option name bash: line 1: shopt: strict_array: invalid shell option name |
mksh | 49 ${mystr[@]} and ${mystr[*]} disallowed with strict_array stdout: abc status=0 abc status=0stderr: mksh: shopt: not found mksh: shopt: not found |
bash | 54 Singleton Array Copy and Assign. OSH can't index strings with ints stdout: 4 4 1 1 4 4 1 1stderr: |
mksh | 54 Singleton Array Copy and Assign. OSH can't index strings with ints stdout: 4 4 1 1 4 4 1 1stderr: |
mksh | 59 Slice of sparse array with [@] stdout: stderr: mksh: <stdin>[4]: ${a[@]: 15:2}: bad substitution |
mksh | 65 Is element set? test -v a[i] stdout: set=2 empty=2 unset=2stderr: mksh: <stdin>[3]: test: array[1]: unexpected operator/operand mksh: <stdin>[6]: test: array[3]: unexpected operator/operand mksh: <stdin>[9]: test: array[4]: unexpected operator/operand |
mksh | 66 [[ -v a[i] ]] stdout: stderr: mksh: <stdin>[2]: syntax error: 'array[1]' unexpected operator/operand |
mksh | 67 test -v a[i] with arith expressions stdout: status=2 status=2 dbracketstderr: mksh: <stdin>[3]: test: array[1+1]: unexpected operator/operand mksh: <stdin>[6]: test: array[4+1]: unexpected operator/operand mksh: <stdin>[12]: syntax error: 'array[1+1]' unexpected operator/operand |
osh | 67 test -v a[i] with arith expressions [osh stdout] Expected 'status=0\nstatus=1\n\ndbracket\nstatus=0\nstatus=1\n' Got 'status=1\nstatus=1\n\ndbracket\nstatus=1\nstatus=1\n' stdout: status=1 status=1 dbracket status=1 status=1stderr: |
mksh | 68 More arith expressions in [[ -v array[expr]] ]] stdout: stderr: mksh: <stdin>[6]: syntax error: 'array[zero+0]' unexpected operator/operand |
osh | 68 More arith expressions in [[ -v array[expr]] ]] [osh stdout] Expected 'zero=0\none=0\ntwo=1\n---\nzero=0\none=0\ntwo=1\n---\nzero=0\none=0\ntwo=1\n' Got 'zero=1\none=1\ntwo=1\n---\nzero=1\none=1\ntwo=1\n---\nzero=1\none=1\ntwo=1\n' stdout: zero=1 one=1 two=1 --- zero=1 one=1 two=1 --- zero=1 one=1 two=1stderr: |
bash | 69 Regression: Assigning with out-of-range negative index stdout: stderr: bash: line 2: a[-1]: bad array subscript |
mksh | 69 Regression: Assigning with out-of-range negative index stdout: stderr: |
mksh | 70 Regression: Negative index in [[ -v a[index] ]] stdout: stderr: mksh: <stdin>[4]: syntax error: 'a[-1]' unexpected operator/operand |
bash | 71 Regression: Negative out-of-range index in [[ -v a[index] ]] stdout: stderr: bash: line 2: e: bad array subscript |
mksh | 71 Regression: Negative out-of-range index in [[ -v a[index] ]] stdout: stderr: mksh: <stdin>[2]: syntax error: 'e[-1]' unexpected operator/operand |
bash | 72 a+=() modifies existing instance of BashArray stdout: stderr: |
mksh | 72 a+=() modifies existing instance of BashArray stdout: stderr: |
bash | 73 Regression: unset a[-2]: out-of-bound negative index should cause error stdout: stderr: bash: line 4: unset: [-2]: bad array subscript |
mksh | 73 Regression: unset a[-2]: out-of-bound negative index should cause error stdout: stderr: |
mksh | 74 Regression: Out-of-bound negative offset for ${a[@]:offset} stdout: stderr: |
mksh | 75 Regression: Array length after unset stdout: stderr: |
bash | 76 Regression: ${a[@]@Q} crash with `a[0]=x a[2]=y` stdout: quoted = ('x' 'y')stderr: |
mksh | 76 Regression: ${a[@]@Q} crash with `a[0]=x a[2]=y` stdout: stderr: |
bash | 77 Regression: silent out-of-bound negative index in ${a[-2]} and $((a[-2])) stdout: [] 0 [0] 0stderr: bash: line 4: a: bad array subscript bash: line 6: a: bad array subscript |
mksh | 77 Regression: silent out-of-bound negative index in ${a[-2]} and $((a[-2])) stdout: stderr: |