ble-idioms () { sh-spec spec/ble-idioms.test.sh $BASH $ZSH $MKSH $BUSYBOX_ASH $OSH_LIST "$@" }
spec test index / oilshell.org
| status | bash | zsh | mksh | ash | osh | |
| pass | 13 | 9 | 9 | 5 | 14 | |
| N-I | 1 | 2 | 4 | 6 | 0 | |
| BUG | 0 | 3 | 1 | 3 | 0 | |
| total | 14 | 14 | 14 | 14 | 14 | |
| case | bash | zsh | mksh | ash | osh | description | 
| 0 | pass | pass | pass | pass | pass | recursive arith: one level | 
| 1 | pass | pass | pass | pass | pass | recursive arith: two levels | 
| 2 | pass | pass | BUG | BUG | pass | recursive arith: short circuit &&, || | 
| details | details | |||||
| 3 | pass | pass | pass | BUG | pass | recursive arith: short circuit ?: | 
| details | ||||||
| 4 | pass | BUG | pass | BUG | pass | recursive arith: side effects | 
| details | details | |||||
| 5 | pass | pass | N-I | N-I | pass | recursive arith: recursion | 
| details | details | |||||
| 6 | pass | pass | pass | N-I | pass | recursive arith: array elements | 
| details | ||||||
| 7 | pass | pass | pass | pass | pass | dynamic arith varname: assign | 
| 8 | pass | pass | pass | pass | pass | dynamic arith varname: read | 
| 9 | pass | pass | pass | pass | pass | dynamic arith varname: copy/add | 
| 10 | pass | N-I | N-I | N-I | pass | is-array with ${var@a} | 
| details | details | details | ||||
| 11 | pass | BUG | pass | N-I | pass | Sparse array with big index | 
| details | details | |||||
| 12 | pass | BUG | N-I | N-I | pass | shift unshift reverse | 
| details | details | details | ||||
| 13 | N-I | N-I | N-I | N-I | pass | Performance demo | 
| details | details | details | details | 
50 passed, 0 OK, 13 not implemented, 7 BUG, 0 failed, 0 timeouts, 0 cases skipped
| mksh | 2 recursive arith: short circuit &&, || stdout: 1:123 1:123 0:321 1:321stderr:  | 
| ash | 2 recursive arith: short circuit &&, || stdout: 1:123 1:123 0:321 1:321stderr:  | 
| ash | 3 recursive arith: short circuit ?: stdout: 123:321 321:321stderr:  | 
| zsh | 4 recursive arith: side effects stdout: 0:123stderr:  | 
| ash | 4 recursive arith: side effects stdout: 0:123stderr:  | 
| mksh | 5 recursive arith: recursion stdout: stderr: mksh: <stdin>[2]: i<=100&&(s+=i,i++,loop): expression recurses on parameter 'loop'  | 
| ash | 5 recursive arith: recursion stdout: stderr: ash: expression recursion loop detected  | 
| ash | 6 recursive arith: array elements stdout: stderr: ash: text[1]=d=123: not found ash: text[2]=text[1]: not found ash: text[3]=text[2]: not found ash: arithmetic syntax error  | 
| zsh | 10 is-array with ${var@a} stdout: stderr: ble/is-array: bad substitution  | 
| mksh | 10 is-array with ${var@a} stdout: stderr:  | 
| ash | 10 is-array with ${var@a} stdout: stderr:  | 
| zsh | 11 Sparse array with big index stdout: len=1048576stderr:  | 
| ash | 11 Sparse array with big index stdout: stderr: ash: syntax error: unexpected "("
 | 
| zsh | 12 shift unshift reverse stdout: 1 2 3 4 5 6 2 3 4 5 6 4 5 6 --- 99 4 5 6 --- 5 4 99stderr: (eval):4: a: assignment to invalid subscript range  | 
| mksh | 12 shift unshift reverse stdout: stderr:  | 
| ash | 12 shift unshift reverse stdout: stderr:  | 
| bash | 13 Performance demo stdout: stderr:  | 
| zsh | 13 Performance demo stdout: stderr:  | 
| mksh | 13 Performance demo stdout: stderr:  | 
| ash | 13 Performance demo stdout: stderr:  |