| 1 |
## oils_failures_allowed: 2
|
| 2 |
## our_shell: ysh
|
| 3 |
|
| 4 |
|
| 5 |
var x = :|a b 'c d'|
|
| 6 |
|
| 7 |
var y = join(x)
|
| 8 |
argv.py $y
|
| 9 |
|
| 10 |
var z = join(x, ":")
|
| 11 |
argv.py $z
|
| 12 |
## STDOUT:
|
| 13 |
['abc d']
|
| 14 |
['a:b:c d']
|
| 15 |
## END
|
| 16 |
|
| 17 |
|
| 18 |
setvar IFS = ":"
|
| 19 |
var x = "one:two:three"
|
| 20 |
argv.py @[split(x)]
|
| 21 |
## STDOUT:
|
| 22 |
['one', 'two', 'three']
|
| 23 |
## END
|
| 24 |
|
| 25 |
|
| 26 |
setvar empty = ''
|
| 27 |
setvar x = 'X'
|
| 28 |
argv.py a @[maybe(empty)] @[maybe(x)] b
|
| 29 |
|
| 30 |
setvar n = null
|
| 31 |
argv.py a @[maybe(n)] b
|
| 32 |
|
| 33 |
## STDOUT:
|
| 34 |
['a', 'X', 'b']
|
| 35 |
['a', 'b']
|
| 36 |
## END
|
| 37 |
|
| 38 |
|
| 39 |
|
| 40 |
# not allowed
|
| 41 |
setvar marray = :||
|
| 42 |
argv.py a @[maybe(marray)] b
|
| 43 |
echo done
|
| 44 |
## status: 3
|
| 45 |
## STDOUT:
|
| 46 |
## END
|
| 47 |
|
| 48 |
|
| 49 |
var myarray = :| --all --long |
|
| 50 |
write -- @[myarray]
|
| 51 |
write -- @[split(myarray)]
|
| 52 |
## status: 3
|
| 53 |
## STDOUT:
|
| 54 |
--all
|
| 55 |
--long
|
| 56 |
## END
|
| 57 |
|
| 58 |
|
| 59 |
|
| 60 |
# empty glob
|
| 61 |
write -- A @[glob('__nope__')] B
|
| 62 |
echo ___
|
| 63 |
|
| 64 |
touch -- a.z b.z -.z
|
| 65 |
write -- @[glob('?.z')]
|
| 66 |
echo ___
|
| 67 |
|
| 68 |
# add it back
|
| 69 |
shopt -s dashglob
|
| 70 |
write -- @[glob('?.z')]
|
| 71 |
|
| 72 |
## STDOUT:
|
| 73 |
A
|
| 74 |
B
|
| 75 |
___
|
| 76 |
a.z
|
| 77 |
b.z
|
| 78 |
___
|
| 79 |
-.z
|
| 80 |
a.z
|
| 81 |
b.z
|
| 82 |
## END
|
| 83 |
|
| 84 |
|
| 85 |
|
| 86 |
var s = ' aa a bb b '
|
| 87 |
|
| 88 |
argv.py @[shSplit(s)]
|
| 89 |
|
| 90 |
setvar IFS = 'a'
|
| 91 |
|
| 92 |
argv.py @[shSplit(s)]
|
| 93 |
|
| 94 |
setvar IFS = 'b'
|
| 95 |
|
| 96 |
argv.py @[shSplit(s)]
|
| 97 |
|
| 98 |
## STDOUT:
|
| 99 |
['aa', 'a', 'bb', 'b']
|
| 100 |
[' ', '', ' ', ' bb b ']
|
| 101 |
[' aa a ', '', ' ', ' ']
|
| 102 |
## END
|
| 103 |
|
| 104 |
|
| 105 |
|
| 106 |
|
| 107 |
# compare with shvarGet(), which does dynamic scope
|
| 108 |
|
| 109 |
proc my-proc {
|
| 110 |
var mylocal = 43
|
| 111 |
|
| 112 |
echo g=$[getVar('g')]
|
| 113 |
echo mylocal=$[getVar('mylocal')]
|
| 114 |
|
| 115 |
# the whole purpose is dynamic variable names / dynamic binding
|
| 116 |
var prefix = 'my'
|
| 117 |
echo mylocal=$[getVar(prefix ++ 'local')]
|
| 118 |
|
| 119 |
echo not_global_or_local=$[getVar('not_global_or_local')]
|
| 120 |
}
|
| 121 |
|
| 122 |
proc main {
|
| 123 |
var not_global_or_local = 42
|
| 124 |
my-proc
|
| 125 |
}
|
| 126 |
|
| 127 |
var g = 'global'
|
| 128 |
|
| 129 |
main
|
| 130 |
|
| 131 |
## STDOUT:
|
| 132 |
g=global
|
| 133 |
mylocal=43
|
| 134 |
mylocal=43
|
| 135 |
not_global_or_local=null
|
| 136 |
## END
|
| 137 |
|
| 138 |
|
| 139 |
|
| 140 |
var x = 'abc-'
|
| 141 |
var y = 'XYZ!'
|
| 142 |
|
| 143 |
echo $x
|
| 144 |
echo $y
|
| 145 |
echo
|
| 146 |
|
| 147 |
echo $[x => upper()]
|
| 148 |
echo $[x => lower()]
|
| 149 |
echo $[y => upper()]
|
| 150 |
echo $[y => lower()]
|
| 151 |
|
| 152 |
## STDOUT:
|
| 153 |
abc-
|
| 154 |
XYZ!
|
| 155 |
|
| 156 |
ABC-
|
| 157 |
abc-
|
| 158 |
XYZ!
|
| 159 |
xyz!
|
| 160 |
## END
|
| 161 |
|
| 162 |
|
| 163 |
|
| 164 |
# Adapted from spec/var-op-bash
|
| 165 |
|
| 166 |
# https://www.utf8-chartable.de/unicode-utf8-table.pl
|
| 167 |
|
| 168 |
var x = u'\u{C0}\u{C8}' # upper grave
|
| 169 |
var y = u'\u{E1}\u{E9}' # lower acute
|
| 170 |
|
| 171 |
echo $x
|
| 172 |
echo $y
|
| 173 |
echo
|
| 174 |
|
| 175 |
echo $[x => upper()]
|
| 176 |
echo $[x => lower()]
|
| 177 |
echo $[y => upper()]
|
| 178 |
echo $[y => lower()]
|
| 179 |
|
| 180 |
## STDOUT:
|
| 181 |
ÀÈ
|
| 182 |
áé
|
| 183 |
## END
|
| 184 |
|
| 185 |
|
| 186 |
|
| 187 |
var fr = vm.getFrame(0)
|
| 188 |
pp test_ (fr)
|
| 189 |
var d = dict(fr)
|
| 190 |
pp test_ (d.ARGV)
|
| 191 |
echo
|
| 192 |
|
| 193 |
proc p1 {
|
| 194 |
var p1_var = 'x'
|
| 195 |
p2
|
| 196 |
}
|
| 197 |
|
| 198 |
proc p2 {
|
| 199 |
echo 'p2 frame -1'
|
| 200 |
var fr = vm.getFrame(-1)
|
| 201 |
var d = dict(fr)
|
| 202 |
|
| 203 |
pp test_ (fr)
|
| 204 |
pp test_ (d)
|
| 205 |
pp test_ (keys(d))
|
| 206 |
echo
|
| 207 |
|
| 208 |
echo 'p2 frame -2'
|
| 209 |
setvar fr = vm.getFrame(-2)
|
| 210 |
setvar d = dict(fr)
|
| 211 |
|
| 212 |
pp test_ (fr)
|
| 213 |
pp test_ (keys(d))
|
| 214 |
echo
|
| 215 |
}
|
| 216 |
|
| 217 |
p1
|
| 218 |
|
| 219 |
var fr = vm.getFrame(99) # fails
|
| 220 |
|
| 221 |
## status: 3
|
| 222 |
## STDOUT:
|
| 223 |
<Frame>
|
| 224 |
(List) []
|
| 225 |
|
| 226 |
p2 frame -1
|
| 227 |
<Frame>
|
| 228 |
(Dict) {"ARGV":[],"fr":<Frame>}
|
| 229 |
(List) ["ARGV","fr"]
|
| 230 |
|
| 231 |
p2 frame -2
|
| 232 |
<Frame>
|
| 233 |
(List) ["ARGV","p1_var"]
|
| 234 |
|
| 235 |
## END
|
| 236 |
|
| 237 |
|
| 238 |
|
| 239 |
|
| 240 |
var frag = ^(echo $i)
|
| 241 |
|
| 242 |
# TODO: should be fragment
|
| 243 |
pp test_ (frag)
|
| 244 |
|
| 245 |
var cmd = bindFrame(frag, getFrame(0))
|
| 246 |
|
| 247 |
pp test_ (cmd)
|
| 248 |
|
| 249 |
## STDOUT:
|
| 250 |
## END
|