spec test index / oilshell.org
347 passed, 10 OK, 89 not implemented, 30 BUG, 7 failed, 0 timeouts, 0 cases skipped 7 failed under osh
zsh | 0 echo dashes stdout: -- ---stderr: |
dash | 1 echo backslashes stdout: \ \ \ \stderr: |
mksh | 1 echo backslashes stdout: \ \ \ \stderr: |
zsh | 1 echo backslashes stdout: \ \ \ \stderr: |
dash | 2 echo -e backslashes stdout: -e \ -e \ -e \ -e \stderr: |
dash | 3 echo -en stdout: -en abc defstderr: |
dash | 4 echo -ez (invalid flag) stdout: -ez abcstderr: |
mksh | 4 echo -ez (invalid flag) stdout: -ez abcstderr: |
zsh | 4 echo -ez (invalid flag) stdout: -ez abcstderr: |
dash | 7 echo -e with C escapes stdout: -e \d\estderr: |
dash | 8 echo -e with whitespace C escapes stdout: -estderr: |
dash | 9 \0 stdout: -e ab cdstderr: |
mksh | 10 \c stops processing input stdout: xy abde zzzstderr: |
dash | 11 echo -e with hex escape stdout: -e abcd\x65fstderr: |
dash | 13 echo -e with 4 digit unicode escape stdout: abcd\u0065fstderr: |
ash | 13 echo -e with 4 digit unicode escape stdout: abcd\u0065fstderr: |
dash | 14 echo -e with 8 digit unicode escape stdout: abcd\U00000065fstderr: |
ash | 14 echo -e with 8 digit unicode escape stdout: abcd\U00000065fstderr: |
dash | 15 \0377 is the highest octal byte stdout: 2d 65 6e 20 ff 37 0astderr: |
dash | 16 \0400 is one more than the highest octal byte stdout: 2d 65 6e 20 00 30 0astderr: |
ash | 16 \0400 is one more than the highest octal byte stdout: 20 30 30stderr: |
mksh | 17 \0777 is out of range stdout: c3 bfstderr: |
ash | 17 \0777 is out of range stdout: 3f 37stderr: |
dash | 18 incomplete hex escape stdout: - e n a b c d \ x 6 \nstderr: |
dash | 19 \x stdout: - e \ x \ x g \nstderr: |
mksh | 19 \x stdout: \0 \0 g \nstderr: |
zsh | 19 \x stdout: \0 \0 g \nstderr: |
dash | 21 incomplete unicode escape stdout: - e n a b c d \ u 0 0 6 \nstderr: |
ash | 21 incomplete unicode escape stdout: a b c d \ u 0 0 6stderr: |
dash | 22 \u6 stdout: \ u 6stderr: |
ash | 22 \u6 stdout: \ u 6stderr: |
dash | 23 \0 \1 \8 stdout: \0 001 \ 8stderr: |
ash | 23 \0 \1 \8 stdout: \0 001 \ 8stderr: |
dash | 25 Read from empty file stdout: ['status=1', ''] ['status=2', '']stderr: dash: 4: read: arg count |
dash | 26 read /dev/null stdout: 2stderr: dash: 1: read: Illegal option -n |
dash | 27 read with zero args stdout: status=2stderr: dash: 1: read: arg count |
dash | 31 Read -n (with $REPLY) stdout: []stderr: dash: 2: read: Illegal option -n dash: 3: read: Illegal option -n |
zsh | 31 Read -n (with $REPLY) stdout: []stderr: |
dash | 32 IFS= read -n (OSH regression: value saved in tempenv) stdout: ['']stderr: dash: 2: read: Illegal option -n |
zsh | 32 IFS= read -n (OSH regression: value saved in tempenv) stdout: ['']stderr: |
dash | 33 Read uses $REPLY (without -n) stdout: stderr: dash: 2: read: arg count |
mksh | 35 read -r with other backslash escapes stdout: ['one twoethree', 'one\\ twoethree']stderr: |
zsh | 35 read -r with other backslash escapes stdout: ['one twoethree', 'one\\ twoethree']stderr: |
dash | 36 read with line continuation reads multiple physical lines stdout: ['-e onetwo', '-e one\\']stderr: |
dash | 38 read -r with \n stdout: ['', '']stderr: |
mksh | 38 read -r with \n stdout: ['', '']stderr: |
zsh | 38 read -r with \n stdout: ['', '']stderr: |
dash | 39 read -s from pipe, not a terminal stdout: stderr: |
zsh | 39 read -s from pipe, not a terminal stdout: stderr: |
dash | 40 Read with IFS=$'\n' stdout: [a b c]stderr: |
dash | 43 Read should not respect C escapes. stdout: stderr: |
mksh | 43 Read should not respect C escapes. stdout: d g h e 145 istderr: |
zsh | 43 Read should not respect C escapes. stdout: stderr: |
ash | 43 Read should not respect C escapes. stdout: abcdefghx65 145 istderr: |
dash | 45 read -a reads into array stdout: stderr: |
mksh | 45 read -a reads into array stdout: stderr: |
zsh | 45 read -a reads into array stdout: stderr: |
ash | 45 read -a reads into array stdout: stderr: ash: read: line 6: illegal option -a ash: syntax error: bad substitution |
bash | 46 read -n with invalid arg stdout: status=1stderr: bash: line 1: read: not_a_number: invalid number |
zsh | 46 read -n with invalid arg stdout: stderr: |
dash | 47 read returns correct number of bytes without EOF stdout: stderr: |
zsh | 47 read returns correct number of bytes without EOF stdout: stderr: |
ash | 47 read returns correct number of bytes without EOF stdout: stderr: |
dash | 48 read -d : (colon-separated records) stdout: v1= v1= v2= v1= v2= v3=stderr: dash: 3: read: Illegal option -d dash: 5: read: Illegal option -d dash: 7: read: Illegal option -d |
ash | 48 read -d : (colon-separated records) stdout: v1=a,b,c v1=d,e,f v2= v1=g,h,i v2= v3=stderr: |
dash | 49 read -d '' (null-separated records) stdout: v1= v1= v2= v1= v2= v3=stderr: dash: 3: read: Illegal option -d dash: 5: read: Illegal option -d dash: 7: read: Illegal option -d |
ash | 49 read -d '' (null-separated records) stdout: v1=a,b,cd,e,fg,h,i v1= v2= v1= v2= v3=stderr: |
dash | 50 read -rd stdout: stderr: dash: 1: read: Illegal option -d |
dash | 51 read -d when there's no delimiter stdout: 2 2stderr: dash: 1: read: Illegal option -d dash: 3: read: Illegal option -d |
dash | 52 read -t 0 tests if input is available stdout: stderr: |
mksh | 52 read -t 0 tests if input is available stdout: stderr: |
zsh | 52 read -t 0 tests if input is available stdout: stderr: |
dash | 53 read -t 0.5 stdout: stderr: |
mksh | 53 read -t 0.5 stdout: 1stderr: |
zsh | 53 read -t 0.5 stdout: 1stderr: |
osh | 53 read -t 0.5 [osh stdout] Expected '1\n', got '' [osh status] Expected 0, got 1 stdout: stderr: read -t 0.5 < /dev/null ^~~~ [ stdin ]:2: fatal: read -t isn't implemented (except t=0) |
osh_ALT | 53 read -t 0.5 [osh_ALT stdout] Expected '1\n', got '' [osh_ALT status] Expected 0, got 1 stdout: stderr: read -t 0.5 < /dev/null ^~~~ [ stdin ]:2: fatal: read -t isn't implemented (except t=0) |
bash | 54 read -t -0.5 is invalid stdout: 1stderr: |
zsh | 54 read -t -0.5 is invalid stdout: stderr: zsh: not an identifier: -0.5 |
dash | 55 read -u stdout: stderr: |
mksh | 55 read -u stdout: stderr: |
osh | 55 read -u [osh stdout] Expected 'reply=hi\n', got 'reply=\n' stdout: reply=stderr: |
osh_ALT | 55 read -u [osh_ALT stdout] Expected 'reply=hi\n', got 'reply=\n' stdout: reply=stderr: |
bash | 56 read -u syntax error stdout: status=1stderr: bash: line 1: read: -3: invalid file descriptor specification |
zsh | 56 read -u syntax error stdout: status=1stderr: |
dash | 57 read -N doesn't respect delimiter, while read -n does stdout: stderr: |
mksh | 57 read -N doesn't respect delimiter, while read -n does stdout: fooba foobastderr: |
zsh | 57 read -N doesn't respect delimiter, while read -n does stdout: stderr: |
ash | 57 read -N doesn't respect delimiter, while read -n does stdout: stderr: |
osh | 57 read -N doesn't respect delimiter, while read -n does [osh stdout] Expected 'foo\nfooba\n', got 'fooba\nfooba\n' stdout: fooba foobastderr: echo foobar | { read -N 5 -d b; echo $REPLY; } ^~ [ stdin ]:3: 'read' doesn't accept flag -N |
osh_ALT | 57 read -N doesn't respect delimiter, while read -n does [osh_ALT stdout] Expected 'foo\nfooba\n', got 'fooba\nfooba\n' stdout: fooba foobastderr: echo foobar | { read -N 5 -d b; echo $REPLY; } ^~ [ stdin ]:3: 'read' doesn't accept flag -N |
dash | 58 read -p (not fully tested) stdout: stderr: |
mksh | 58 read -p (not fully tested) stdout: stderr: |
zsh | 58 read -p (not fully tested) stdout: stderr: |
bash | 59 read usage stdout: status=1stderr: bash: line 1: read: -1: invalid number |
mksh | 59 read usage stdout: stderr: |
zsh | 59 read usage stdout: stderr: zsh: not an identifier: -1 |
dash | 60 read with smooshed args stdout: var=stderr: dash: 1: read: Illegal option -n |
zsh | 60 read with smooshed args stdout: var=stderr: zsh: bad option: -1 echo: write error: broken pipe zsh: write error: inappropriate ioctl for device |
dash | 61 mapfile stdout: stderr: |
mksh | 61 mapfile stdout: stderr: |
zsh | 61 mapfile stdout: stderr: |
ash | 61 mapfile stdout: stderr: |
dash | 62 readarray (synonym for mapfile) stdout: stderr: |
mksh | 62 readarray (synonym for mapfile) stdout: stderr: |
zsh | 62 readarray (synonym for mapfile) stdout: stderr: |
ash | 62 readarray (synonym for mapfile) stdout: stderr: |
dash | 63 mapfile (array name): arr stdout: stderr: |
mksh | 63 mapfile (array name): arr stdout: stderr: |
zsh | 63 mapfile (array name): arr stdout: stderr: |
ash | 63 mapfile (array name): arr stdout: stderr: |
dash | 64 mapfile (delimiter): -d delim stdout: stderr: |
mksh | 64 mapfile (delimiter): -d delim stdout: stderr: |
zsh | 64 mapfile (delimiter): -d delim stdout: stderr: |
ash | 64 mapfile (delimiter): -d delim stdout: stderr: |
osh | 64 mapfile (delimiter): -d delim [osh stdout] Expected 'n=3\n[1:]\n[3:]\n[5:]\n', got 'n=0\n[]\n' stdout: n=0 []stderr: mapfile -d : arr ^~ [ stdin ]:3: 'mapfile' doesn't accept flag -d |
osh_ALT | 64 mapfile (delimiter): -d delim [osh_ALT stdout] Expected 'n=3\n[1:]\n[3:]\n[5:]\n', got 'n=0\n[]\n' stdout: n=0 []stderr: mapfile -d : arr ^~ [ stdin ]:3: 'mapfile' doesn't accept flag -d |
dash | 65 mapfile (delimiter): -d '' (null-separated) stdout: stderr: |
mksh | 65 mapfile (delimiter): -d '' (null-separated) stdout: stderr: |
zsh | 65 mapfile (delimiter): -d '' (null-separated) stdout: stderr: |
ash | 65 mapfile (delimiter): -d '' (null-separated) stdout: stderr: |
osh | 65 mapfile (delimiter): -d '' (null-separated) [osh stdout] Expected 'n=3\n[1]\n[3]\n[5]\n', got 'n=0\n[]\n' stdout: n=0 []stderr: mapfile -d '' arr ^~ [ stdin ]:3: 'mapfile' doesn't accept flag -d |
osh_ALT | 65 mapfile (delimiter): -d '' (null-separated) [osh_ALT stdout] Expected 'n=3\n[1]\n[3]\n[5]\n', got 'n=0\n[]\n' stdout: n=0 []stderr: mapfile -d '' arr ^~ [ stdin ]:3: 'mapfile' doesn't accept flag -d |
dash | 66 mapfile (truncate delim): -t stdout: stderr: |
mksh | 66 mapfile (truncate delim): -t stdout: stderr: |
zsh | 66 mapfile (truncate delim): -t stdout: stderr: |
ash | 66 mapfile (truncate delim): -t stdout: stderr: |
dash | 67 mapfile -t doesn't remove \r stdout: stderr: |
mksh | 67 mapfile -t doesn't remove \r stdout: stderr: |
zsh | 67 mapfile -t doesn't remove \r stdout: stderr: |
ash | 67 mapfile -t doesn't remove \r stdout: stderr: |
dash | 68 mapfile (store position): -O start stdout: stderr: |
mksh | 68 mapfile (store position): -O start stdout: stderr: |
zsh | 68 mapfile (store position): -O start stdout: stderr: |
ash | 68 mapfile (store position): -O start stdout: stderr: |
osh | 68 mapfile (store position): -O start [osh stdout] Expected 'n=5\n[x]\n[y]\n[a0]\n[a1]\n[a2]\n', got 'n=3\n[x]\n[y]\n[z]\n' stdout: n=3 [x] [y] [z]stderr: mapfile -O 2 -t arr ^~ [ stdin ]:4: 'mapfile' doesn't accept flag -O |
osh_ALT | 68 mapfile (store position): -O start [osh_ALT stdout] Expected 'n=5\n[x]\n[y]\n[a0]\n[a1]\n[a2]\n', got 'n=3\n[x]\n[y]\n[z]\n' stdout: n=3 [x] [y] [z]stderr: mapfile -O 2 -t arr ^~ [ stdin ]:4: 'mapfile' doesn't accept flag -O |
dash | 69 mapfile (input range): -s start -n count stdout: stderr: |
mksh | 69 mapfile (input range): -s start -n count stdout: stderr: |
zsh | 69 mapfile (input range): -s start -n count stdout: stderr: |
ash | 69 mapfile (input range): -s start -n count stdout: stderr: |
osh | 69 mapfile (input range): -s start -n count [osh stdout] Expected 'n=3\n[a5]\n[a6]\n[a7]\n', got 'n=0\n[]\n' stdout: n=0 []stderr: mapfile -s 5 -n 3 -t arr ^~ [ stdin ]:3: 'mapfile' doesn't accept flag -s |
osh_ALT | 69 mapfile (input range): -s start -n count [osh_ALT stdout] Expected 'n=3\n[a5]\n[a6]\n[a7]\n', got 'n=0\n[]\n' stdout: n=0 []stderr: mapfile -s 5 -n 3 -t arr ^~ [ stdin ]:3: 'mapfile' doesn't accept flag -s |