spec test index / oilshell.org
status | bash | osh | osh_ALT | |
pass | 8 | 4 | 4 | |
ok | 2 | 1 | 1 | |
N-I | 0 | 1 | 1 | |
FAIL | 0 | 4 | 4 | |
total | 10 | 10 | 10 | |
case | bash | osh | osh_ALT | description |
0 | pass | pass | pass | var ref ${!a} |
1 | pass | FAIL | FAIL | var ref: positional params |
details | details | |||
2 | pass | N-I | N-I | var ref to $? with '?' |
details | details | |||
3 | pass | FAIL | FAIL | indirection, *then* fancy expansion features |
details | details | |||
4 | pass | FAIL | FAIL | indirection *to* an array reference |
details | details | |||
5 | ok | pass | pass | indirection to nasty complex array references |
details | ||||
6 | ok | pass | pass | indirection *to* fancy expansion features bash disallows |
details | ||||
7 | pass | FAIL | FAIL | declare -n and ${!a} |
details | details | |||
8 | pass | ok | ok | Bad var ref with ${!a} |
details | details | |||
9 | pass | pass | pass | ${!OPTIND} (used by bash completion |
16 passed, 4 OK, 2 not implemented, 0 BUG, 4 failed, 0 timeouts, 0 cases skipped 4 failed under osh
osh | 1 var ref: positional params [osh stdout] Expected '|x|\n|x|y|\n|x y|\n', got '|x|\n|x|y|\n|x|y|\n' stdout: |x| |x|y| |x|y|stderr: |
osh_ALT | 1 var ref: positional params [osh_ALT stdout] Expected '|x|\n|x|y|\n|x y|\n', got '|x|\n|x|y|\n|x|y|\n' stdout: |x| |x|y| |x|y|stderr: |
osh | 2 var ref to $? with '?' stdout: myfuncstderr: echo ${!ref} ^~~ [ stdin ]:3: fatal: Bad indirect expansion: '?' |
osh_ALT | 2 var ref to $? with '?' stdout: myfuncstderr: echo ${!ref} ^~~ [ stdin ]:3: fatal: Bad indirect expansion: '?' |
osh | 3 indirection, *then* fancy expansion features [osh stdout] Expected 'ok\n', got '${!b[1]} -> expected asdf, got asdf x\n${!y:-foo} -> expected foo, got y yy\n${!x:-foo} -> expected aaabcc, got x xd xx\nz zip zz vs foo\n$zz -> expected foo, got \nz zip zz vs foo\n$zz -> expected foo, got \nbad success: ${!w:?oops}\nbad err msg: ${!w:?oops} -> 21:42:45 up 34 days, 22:42, 23 users, load average: 6.25, 6.25, 3.81\nUSER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n${!x:?oops} -> expected aaabcc, got x xd xx\n${!y:+foo} -> expected , got y yy\n${!x:+foo} -> expected foo, got x xd xx\n${!x:2} -> expected abcc, got \n${!x:2:2} -> expected ab, got \n${!x#*a} -> expected aabcc, got x xd xx\n${!x%%c*} -> expected aaab, got x xd xx\n${!x/a*b/d} -> expected dcc, got \n${!x^a} -> expected Aaabcc, got x xd xx\n${!p@P} -> expected $ , got p pp\nok\n' stdout: ${!b[1]} -> expected asdf, got asdf x ${!y:-foo} -> expected foo, got y yy ${!x:-foo} -> expected aaabcc, got x xd xx z zip zz vs foo $zz -> expected foo, got z zip zz vs foo $zz -> expected foo, got bad success: ${!w:?oops} bad err msg: ${!w:?oops} -> 21:42:45 up 34 days, 22:42, 23 users, load average: 6.25, 6.25, 3.81 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ${!x:?oops} -> expected aaabcc, got x xd xx ${!y:+foo} -> expected , got y yy ${!x:+foo} -> expected foo, got x xd xx ${!x:2} -> expected abcc, got ${!x:2:2} -> expected ab, got ${!x#*a} -> expected aabcc, got x xd xx ${!x%%c*} -> expected aaab, got x xd xx ${!x/a*b/d} -> expected dcc, got ${!x^a} -> expected Aaabcc, got x xd xx ${!p@P} -> expected $ , got p pp okstderr: Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/oil.py", line 906, in <module> sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/oil.py", line 864, in main return AppBundleMain(argv) File "/home/andy/git/oilshell/oil/bin/oil.py", line 838, in AppBundleMain status = ShellMain('osh', argv0, main_argv, login_shell) File "/home/andy/git/oilshell/oil/bin/oil.py", line 656, in ShellMain status = main_loop.Batch(ex, c_parser, arena, nodes_out=nodes_out) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 163, in Batch is_return, is_fatal = ex.ExecuteAndCatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1028, in _Dispatch status = self._RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 826, in RunSimpleCommand status = self._RunProc(func_node, argv[1:]) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1959, in _RunProc status = self._Execute(func_node.body) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1357, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1257, in _Dispatch val = self.word_ev.EvalRhsWord(pair.rhs) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1218, in EvalRhsWord return self.EvalWordToString(word) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1130, in EvalWordToString self._EvalWordPart(p, part_vals, quoted=False) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 983, in _EvalWordPart v = self._EvalCommandSub(part.command_list, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1546, in _EvalCommandSub stdout = self.ex.RunCommandSub(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1845, in RunCommandSub _ = p.Start() File "/home/andy/git/oilshell/oil/core/process.py", line 741, in Start self.thunk.Run() File "/home/andy/git/oilshell/oil/core/process.py", line 579, in Run self.ex.ExecuteAndCatch(self.node, fork_external=False) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1352, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1028, in _Dispatch status = self._RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 798, in RunSimpleCommand status = self._RunBuiltin(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 535, in _RunBuiltin status = self._RunBuiltinAndRaise(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 489, in _RunBuiltinAndRaise status = self._Eval(arg_vec) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 362, in _Eval return self._EvalHelper(c_parser, src) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 342, in _EvalHelper return main_loop.Batch(self, c_parser, self.arena) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 163, in Batch is_return, is_fatal = ex.ExecuteAndCatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 991, in _Dispatch cmd_val = self.word_ev.EvalWordSequence2(words, allow_assign=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1484, in EvalWordSequence2 self._EvalWordToParts(w, False, part_vals) # not double quoted File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1089, in _EvalWordToParts self._EvalWordPart(p, part_vals, quoted=quoted, is_subst=is_subst) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 978, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 573, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, quoted=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 997, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 737, in _EvalBracedVarSub maybe_decay_array = not (quoted and part.suffix_op.op_id == Id.VOp3_At) AttributeError: 'suffix_op__Slice' object has no attribute 'op_id' Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/oil.py", line 906, in <module> sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/oil.py", line 864, in main return AppBundleMain(argv) File "/home/andy/git/oilshell/oil/bin/oil.py", line 838, in AppBundleMain status = ShellMain('osh', argv0, main_argv, login_shell) File "/home/andy/git/oilshell/oil/bin/oil.py", line 656, in ShellMain status = main_loop.Batch(ex, c_parser, arena, nodes_out=nodes_out) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 163, in Batch is_return, is_fatal = ex.ExecuteAndCatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1028, in _Dispatch status = self._RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 826, in RunSimpleCommand status = self._RunProc(func_node, argv[1:]) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1959, in _RunProc status = self._Execute(func_node.body) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1357, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1257, in _Dispatch val = self.word_ev.EvalRhsWord(pair.rhs) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1218, in EvalRhsWord return self.EvalWordToString(word) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1130, in EvalWordToString self._EvalWordPart(p, part_vals, quoted=False) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 983, in _EvalWordPart v = self._EvalCommandSub(part.command_list, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1546, in _EvalCommandSub stdout = self.ex.RunCommandSub(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1845, in RunCommandSub _ = p.Start() File "/home/andy/git/oilshell/oil/core/process.py", line 741, in Start self.thunk.Run() File "/home/andy/git/oilshell/oil/core/process.py", line 579, in Run self.ex.ExecuteAndCatch(self.node, fork_external=False) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1352, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1028, in _Dispatch status = self._RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 798, in RunSimpleCommand status = self._RunBuiltin(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 535, in _RunBuiltin status = self._RunBuiltinAndRaise(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 489, in _RunBuiltinAndRaise status = self._Eval(arg_vec) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 362, in _Eval return self._EvalHelper(c_parser, src) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 342, in _EvalHelper return main_loop.Batch(self, c_parser, self.arena) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 163, in Batch is_return, is_fatal = ex.ExecuteAndCatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 991, in _Dispatch cmd_val = self.word_ev.EvalWordSequence2(words, allow_assign=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1484, in EvalWordSequence2 self._EvalWordToParts(w, False, part_vals) # not double quoted File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1089, in _EvalWordToParts self._EvalWordPart(p, part_vals, quoted=quoted, is_subst=is_subst) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 978, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 573, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, quoted=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 997, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 737, in _EvalBracedVarSub maybe_decay_array = not (quoted and part.suffix_op.op_id == Id.VOp3_At) AttributeError: 'suffix_op__Slice' object has no attribute 'op_id' Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/oil.py", line 906, in <module> sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/oil.py", line 864, in main return AppBundleMain(argv) File "/home/andy/git/oilshell/oil/bin/oil.py", line 838, in AppBundleMain status = ShellMain('osh', argv0, main_argv, login_shell) File "/home/andy/git/oilshell/oil/bin/oil.py", line 656, in ShellMain status = main_loop.Batch(ex, c_parser, arena, nodes_out=nodes_out) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 163, in Batch is_return, is_fatal = ex.ExecuteAndCatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1028, in _Dispatch status = self._RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 826, in RunSimpleCommand status = self._RunProc(func_node, argv[1:]) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1959, in _RunProc status = self._Execute(func_node.body) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1357, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1257, in _Dispatch val = self.word_ev.EvalRhsWord(pair.rhs) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1218, in EvalRhsWord return self.EvalWordToString(word) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1130, in EvalWordToString self._EvalWordPart(p, part_vals, quoted=False) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 983, in _EvalWordPart v = self._EvalCommandSub(part.command_list, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1546, in _EvalCommandSub stdout = self.ex.RunCommandSub(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1845, in RunCommandSub _ = p.Start() File "/home/andy/git/oilshell/oil/core/process.py", line 741, in Start self.thunk.Run() File "/home/andy/git/oilshell/oil/core/process.py", line 579, in Run self.ex.ExecuteAndCatch(self.node, fork_external=False) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1352, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1028, in _Dispatch status = self._RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 798, in RunSimpleCommand status = self._RunBuiltin(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 535, in _RunBuiltin status = self._RunBuiltinAndRaise(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 489, in _RunBuiltinAndRaise status = self._Eval(arg_vec) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 362, in _Eval return self._EvalHelper(c_parser, src) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 342, in _EvalHelper return main_loop.Batch(self, c_parser, self.arena) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 163, in Batch is_return, is_fatal = ex.ExecuteAndCatch(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 991, in _Dispatch cmd_val = self.word_ev.EvalWordSequence2(words, allow_assign=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1484, in EvalWordSequence2 self._EvalWordToParts(w, False, part_vals) # not double quoted File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1089, in _EvalWordToParts self._EvalWordPart(p, part_vals, quoted=quoted, is_subst=is_subst) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 978, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 573, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, quoted=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 997, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 737, in _EvalBracedVarSub maybe_decay_array = not (quoted and part.suffix_op.op_id == Id.VOp3_At) AttributeError: 'suffix_op__PatSub' object has no attribute 'op_id' |
osh_ALT | 3 indirection, *then* fancy expansion features [osh_ALT stdout] Expected 'ok\n', got '${!b[1]} -> expected asdf, got asdf x\n${!y:-foo} -> expected foo, got y yy\n${!x:-foo} -> expected aaabcc, got x xd xx\nz zip zz vs foo\n$zz -> expected foo, got \nz zip zz vs foo\n$zz -> expected foo, got \nbad success: ${!w:?oops}\nbad err msg: ${!w:?oops} -> 21:42:46 up 34 days, 22:42, 23 users, load average: 6.39, 6.28, 3.84\nUSER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT\n${!x:?oops} -> expected aaabcc, got x xd xx\n${!y:+foo} -> expected , got y yy\n${!x:+foo} -> expected foo, got x xd xx\n${!x:2} -> expected abcc, got \n${!x:2:2} -> expected ab, got \n${!x#*a} -> expected aabcc, got x xd xx\n${!x%%c*} -> expected aaab, got x xd xx\n${!x/a*b/d} -> expected dcc, got \n${!x^a} -> expected Aaabcc, got x xd xx\n${!p@P} -> expected $ , got p pp\nok\n' stdout: ${!b[1]} -> expected asdf, got asdf x ${!y:-foo} -> expected foo, got y yy ${!x:-foo} -> expected aaabcc, got x xd xx z zip zz vs foo $zz -> expected foo, got z zip zz vs foo $zz -> expected foo, got bad success: ${!w:?oops} bad err msg: ${!w:?oops} -> 21:42:46 up 34 days, 22:42, 23 users, load average: 6.39, 6.28, 3.84 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT ${!x:?oops} -> expected aaabcc, got x xd xx ${!y:+foo} -> expected , got y yy ${!x:+foo} -> expected foo, got x xd xx ${!x:2} -> expected abcc, got ${!x:2:2} -> expected ab, got ${!x#*a} -> expected aabcc, got x xd xx ${!x%%c*} -> expected aaab, got x xd xx ${!x/a*b/d} -> expected dcc, got ${!x^a} -> expected Aaabcc, got x xd xx ${!p@P} -> expected $ , got p pp okstderr: Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/oil.py", line 893, in _cpython_main_hook sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/oil.py", line 864, in main return AppBundleMain(argv) File "/home/andy/git/oilshell/oil/bin/oil.py", line 838, in AppBundleMain status = ShellMain('osh', argv0, main_argv, login_shell) File "/home/andy/git/oilshell/oil/bin/oil.py", line 656, in ShellMain status = main_loop.Batch(ex, c_parser, arena, nodes_out=nodes_out) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 169, in Batch return status File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 826, in RunSimpleCommand status = self._RunProc(func_node, argv[1:]) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1959, in _RunProc status = self._Execute(func_node.body) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1357, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1292, in _Dispatch raise _ControlFlow(node.keyword, val) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1218, in EvalRhsWord return self.EvalWordToString(word) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1130, in EvalWordToString self._EvalWordPart(p, part_vals, quoted=False) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 983, in _EvalWordPart v = self._EvalCommandSub(part.command_list, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1546, in _EvalCommandSub stdout = self.ex.RunCommandSub(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1845, in RunCommandSub _ = p.Start() File "/home/andy/git/oilshell/oil/core/process.py", line 741, in Start self.thunk.Run() File "/home/andy/git/oilshell/oil/core/process.py", line 579, in Run self.ex.ExecuteAndCatch(self.node, fork_external=False) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1352, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 798, in RunSimpleCommand status = self._RunBuiltin(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 535, in _RunBuiltin status = self._RunBuiltinAndRaise(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 489, in _RunBuiltinAndRaise status = self._Eval(arg_vec) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 362, in _Eval return self._EvalHelper(c_parser, src) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 342, in _EvalHelper return main_loop.Batch(self, c_parser, self.arena) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 169, in Batch return status File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1484, in EvalWordSequence2 self._EvalWordToParts(w, False, part_vals) # not double quoted File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1089, in _EvalWordToParts self._EvalWordPart(p, part_vals, quoted=quoted, is_subst=is_subst) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 978, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 573, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, quoted=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 997, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 867, in _EvalBracedVarSub raise NotImplementedError AttributeError: 'suffix_op__Slice' object has no attribute 'op_id' FATAL: couldn't import from app bundle '/home/andy/git/oilshell/oil/_tmp/oil-tar-test/oil-0.7.pre10/_bin/osh' (1) Stripping the oil.ovm binary may cause this error. See https://github.com/oilshell/oil/issues/47 Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/oil.py", line 893, in _cpython_main_hook sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/oil.py", line 864, in main return AppBundleMain(argv) File "/home/andy/git/oilshell/oil/bin/oil.py", line 838, in AppBundleMain status = ShellMain('osh', argv0, main_argv, login_shell) File "/home/andy/git/oilshell/oil/bin/oil.py", line 656, in ShellMain status = main_loop.Batch(ex, c_parser, arena, nodes_out=nodes_out) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 169, in Batch return status File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 826, in RunSimpleCommand status = self._RunProc(func_node, argv[1:]) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1959, in _RunProc status = self._Execute(func_node.body) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1357, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1292, in _Dispatch raise _ControlFlow(node.keyword, val) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1218, in EvalRhsWord return self.EvalWordToString(word) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1130, in EvalWordToString self._EvalWordPart(p, part_vals, quoted=False) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 983, in _EvalWordPart v = self._EvalCommandSub(part.command_list, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1546, in _EvalCommandSub stdout = self.ex.RunCommandSub(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1845, in RunCommandSub _ = p.Start() File "/home/andy/git/oilshell/oil/core/process.py", line 741, in Start self.thunk.Run() File "/home/andy/git/oilshell/oil/core/process.py", line 579, in Run self.ex.ExecuteAndCatch(self.node, fork_external=False) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1352, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 798, in RunSimpleCommand status = self._RunBuiltin(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 535, in _RunBuiltin status = self._RunBuiltinAndRaise(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 489, in _RunBuiltinAndRaise status = self._Eval(arg_vec) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 362, in _Eval return self._EvalHelper(c_parser, src) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 342, in _EvalHelper return main_loop.Batch(self, c_parser, self.arena) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 169, in Batch return status File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1484, in EvalWordSequence2 self._EvalWordToParts(w, False, part_vals) # not double quoted File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1089, in _EvalWordToParts self._EvalWordPart(p, part_vals, quoted=quoted, is_subst=is_subst) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 978, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 573, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, quoted=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 997, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 867, in _EvalBracedVarSub raise NotImplementedError AttributeError: 'suffix_op__Slice' object has no attribute 'op_id' FATAL: couldn't import from app bundle '/home/andy/git/oilshell/oil/_tmp/oil-tar-test/oil-0.7.pre10/_bin/osh' (1) Stripping the oil.ovm binary may cause this error. See https://github.com/oilshell/oil/issues/47 Traceback (most recent call last): File "/home/andy/git/oilshell/oil/bin/oil.py", line 893, in _cpython_main_hook sys.exit(main(sys.argv)) File "/home/andy/git/oilshell/oil/bin/oil.py", line 864, in main return AppBundleMain(argv) File "/home/andy/git/oilshell/oil/bin/oil.py", line 838, in AppBundleMain status = ShellMain('osh', argv0, main_argv, login_shell) File "/home/andy/git/oilshell/oil/bin/oil.py", line 656, in ShellMain status = main_loop.Batch(ex, c_parser, arena, nodes_out=nodes_out) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 169, in Batch return status File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 826, in RunSimpleCommand status = self._RunProc(func_node, argv[1:]) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1959, in _RunProc status = self._Execute(func_node.body) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1357, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1292, in _Dispatch raise _ControlFlow(node.keyword, val) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1218, in EvalRhsWord return self.EvalWordToString(word) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1130, in EvalWordToString self._EvalWordPart(p, part_vals, quoted=False) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 983, in _EvalWordPart v = self._EvalCommandSub(part.command_list, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1546, in _EvalCommandSub stdout = self.ex.RunCommandSub(node) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1845, in RunCommandSub _ = p.Start() File "/home/andy/git/oilshell/oil/core/process.py", line 741, in Start self.thunk.Run() File "/home/andy/git/oilshell/oil/core/process.py", line 579, in Run self.ex.ExecuteAndCatch(self.node, fork_external=False) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1352, in _Dispatch status = self._ExecuteList(node.children) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1756, in _ExecuteList status = self._Execute(child) # last status wins File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 758, in _RunSimpleCommand return self.RunSimpleCommand(cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 798, in RunSimpleCommand status = self._RunBuiltin(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 535, in _RunBuiltin status = self._RunBuiltinAndRaise(builtin_id, cmd_val, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 489, in _RunBuiltinAndRaise status = self._Eval(arg_vec) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 362, in _Eval return self._EvalHelper(c_parser, src) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 342, in _EvalHelper return main_loop.Batch(self, c_parser, self.arena) File "/home/andy/git/oilshell/oil/core/main_loop.py", line 169, in Batch return status File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1789, in ExecuteAndCatch status = self._Execute(node, fork_external=fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1734, in _Execute status, check_errexit = self._Dispatch(node, fork_external) File "/home/andy/git/oilshell/oil/osh/cmd_exec.py", line 1044, in _Dispatch self.mem.PopTemp() File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1484, in EvalWordSequence2 self._EvalWordToParts(w, False, part_vals) # not double quoted File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 1089, in _EvalWordToParts self._EvalWordPart(p, part_vals, quoted=quoted, is_subst=is_subst) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 978, in _EvalWordPart self._EvalDoubleQuoted(part.parts, part_vals) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 573, in _EvalDoubleQuoted self._EvalWordPart(p, part_vals, quoted=True) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 997, in _EvalWordPart self._EvalBracedVarSub(part, part_vals, quoted) File "/home/andy/git/oilshell/oil/osh/word_eval.py", line 867, in _EvalBracedVarSub raise NotImplementedError AttributeError: 'suffix_op__PatSub' object has no attribute 'op_id' FATAL: couldn't import from app bundle '/home/andy/git/oilshell/oil/_tmp/oil-tar-test/oil-0.7.pre10/_bin/osh' (1) Stripping the oil.ovm binary may cause this error. See https://github.com/oilshell/oil/issues/47 |
osh | 4 indirection *to* an array reference [osh stdout] Expected '.\n.x\n.x.y\n.x y\n', got '.\n.x\n.x.y\n.x.y\n' stdout: . .x .x.y .x.ystderr: |
osh_ALT | 4 indirection *to* an array reference [osh_ALT stdout] Expected '.\n.x\n.x.y\n.x y\n', got '.\n.x\n.x.y\n.x.y\n' stdout: . .x .x.y .x.ystderr: |
bash | 5 indirection to nasty complex array references stdout: 1 7 8 9 10 11 endstderr: main: line 4: {1,0}: syntax error: operand expected (error token is "{1,0}") main: line 4: <(echo x): syntax error: operand expected (error token is "<(echo x)") main: line 4: 1 0: syntax error in expression (error token is "0") main: line 4: b*: syntax error: operand expected (error token is "*") main: line 4: a[1"]: bad substitution |
bash | 6 indirection *to* fancy expansion features bash disallows stdout: donestderr: main: line 2: a[0: bad substitution main: line 2: aa[k: bad substitution main: line 2: !x: bad substitution main: line 2: !a[0]: bad substitution main: line 2: x:-foo: bad substitution main: line 2: x:=foo: bad substitution main: line 2: x:?oops: bad substitution main: line 2: x:+yy: bad substitution main: line 2: x:0: bad substitution main: line 2: x:0:1: bad substitution main: line 2: !a@: bad substitution main: line 2: #x: bad substitution main: line 2: x#y: bad substitution main: line 2: x/y/foo: bad substitution main: line 2: x@Q: bad substitution |
osh | 7 declare -n and ${!a} [osh stdout] Expected 'b c\n', got 'c b\n' stdout: c bstderr: declare -n a ^~ [ stdin ]:1: 'declare' doesn't accept flag -n |
osh_ALT | 7 declare -n and ${!a} [osh_ALT stdout] Expected 'b c\n', got 'c b\n' stdout: c bstderr: declare -n a ^~ [ stdin ]:1: 'declare' doesn't accept flag -n |
osh | 8 Bad var ref with ${!a} stdout: stderr: echo ref ${!a} ^ [ stdin ]:2: fatal: Bad indirect expansion: 'bad var name' |
osh_ALT | 8 Bad var ref with ${!a} stdout: stderr: echo ref ${!a} ^ [ stdin ]:2: fatal: Bad indirect expansion: 'bad var name' |