1 ## compare_shells: mksh
2 ## oils_failures_allowed: 4
3
4 # Features that bash 5.3 may implement
5
6 #### ${ echo hi;}
7
8 x=${ echo hi;}
9 echo "[$x]"
10 echo
11
12 # trailing space allowed
13 x=${ echo one; echo two; }
14 echo "[$x]"
15 echo
16
17 myfunc() {
18 echo ' 3 '
19 echo ' 4 5 '
20 }
21
22 x=${ myfunc;}
23 echo "[$x]"
24 echo
25
26 # SYNTAX ERROR
27 x=${myfunc;}
28 echo "[$x]"
29
30 ## status: 1
31 ## STDOUT:
32 [hi]
33
34 [one
35 two]
36
37 [ 3
38 4 5 ]
39
40 ## END
41
42 #### ${ echo hi } without semi-colon
43
44 x=${ echo no-semi }
45 echo "[$x]"
46
47 x=${ echo no-space}
48 echo "[$x]"
49
50 # damn I wanted to take this over! mksh executes it!
51 x=${ ~/ysh-tilde-sub }
52
53 # echo ${ ~/ysh-tilde-sub }
54
55 ## status: 127
56 ## STDOUT:
57 [no-semi]
58 [no-space]
59 ## END
60
61 #### ${|REPLY=hi}
62
63 x=${|y=" reply var "; REPLY=$y}
64 echo "[$x]"
65 echo
66
67 echo ' from file ' > tmp.txt
68
69 x=${|read -r < tmp.txt}
70 echo "[$x]"
71 echo
72
73 # SYNTAX ERROR
74 x=${ |REPLY=zz}
75 echo "[$x]"
76
77 ## status: 1
78 ## STDOUT:
79 [ reply var ]
80
81 [from file]
82
83 ## END
84
85
86 #### for loop / case
87
88 x=${ for i in a b; do echo -$i-; done; }
89 echo "$x"
90
91 y=${|for i in a b; do REPLY+="-$i-"; done; }
92 echo "$y"
93
94 echo
95
96 x2=${ case foo in foo) echo sh-case ;; esac; }
97 echo "$x2"
98
99 y2=${|case foo in foo) REPLY=sh-case ;; esac; }
100 echo "$y2"
101
102 ## STDOUT:
103 -a-
104 -b-
105 -a--b-
106
107 sh-case
108 sh-case
109 ## END