src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/glob_test.elvts (about) 1 //////////// 2 # globbing # 3 //////////// 4 5 //each:in-temp-dir 6 7 ## simple patterns ## 8 ~> use os 9 put z z2 | each $os:mkdir~ 10 put bar foo ipsum lorem | each {|x| echo > $x} 11 ~> put * 12 ▶ bar 13 ▶ foo 14 ▶ ipsum 15 ▶ lorem 16 ▶ z 17 ▶ z2 18 ~> put z* 19 ▶ z 20 ▶ z2 21 ~> put ? 22 ▶ z 23 ~> put ????m 24 ▶ ipsum 25 ▶ lorem 26 27 ## glob applies after brace ## 28 ~> put xy.u xy.v xy.w xz.w | each {|x| echo > $x} 29 ~> put x*.{u v w} 30 ▶ xy.u 31 ▶ xy.v 32 ▶ xy.w 33 ▶ xz.w 34 35 ## recursive patterns ## 36 ~> use os 37 put 1 1/2 1/2/3 | each $os:mkdir~ 38 put a.go 1/a.go 1/2/3/a.go | each {|x| echo > $x} 39 ~> put ** 40 ▶ 1/2/3/a.go 41 ▶ 1/2/3 42 ▶ 1/2 43 ▶ 1/a.go 44 ▶ 1 45 ▶ a.go 46 ~> put **.go 47 ▶ 1/2/3/a.go 48 ▶ 1/a.go 49 ▶ a.go 50 ~> put 1**.go 51 ▶ 1/2/3/a.go 52 ▶ 1/a.go 53 54 ## no match ## 55 ~> put a/b/nonexistent* 56 Exception: wildcard has no match 57 [tty]:1:5-20: put a/b/nonexistent* 58 ~> put a/b/nonexistent*[nomatch-ok] 59 60 ## hidden files ## 61 ~> use os 62 put d .d | each $os:mkdir~ 63 put a .a d/a d/.a .d/a .d/.a | each {|x| echo > $x} 64 ~> put * 65 ▶ a 66 ▶ d 67 ~> put *[match-hidden] 68 ▶ .a 69 ▶ .d 70 ▶ a 71 ▶ d 72 ~> put *[match-hidden]/* 73 ▶ .d/a 74 ▶ d/a 75 ~> put */*[match-hidden] 76 ▶ d/.a 77 ▶ d/a 78 ~> put *[match-hidden]/*[match-hidden] 79 ▶ .d/.a 80 ▶ .d/a 81 ▶ d/.a 82 ▶ d/a 83 84 ## rune matchers ## 85 ~> put a1 a2 b1 c1 ipsum lorem | each {|x| echo > $x} 86 ~> put *[letter] 87 ▶ ipsum 88 ▶ lorem 89 ~> put ?[set:ab]* 90 ▶ a1 91 ▶ a2 92 ▶ b1 93 ~> put ?[range:a-c]* 94 ▶ a1 95 ▶ a2 96 ▶ b1 97 ▶ c1 98 ~> put ?[range:a~c]* 99 ▶ a1 100 ▶ a2 101 ▶ b1 102 ~> put *[range:a-z] 103 ▶ ipsum 104 ▶ lorem 105 ~> put *[range:a-zz] 106 Exception: bad range modifier: a-zz 107 [tty]:1:5-17: put *[range:a-zz] 108 ~> put *[range:foo] 109 Exception: bad range modifier: foo 110 [tty]:1:5-16: put *[range:foo] 111 112 ## but ## 113 ~> put bar foo ipsum lorem | each {|x| echo > $x} 114 ~> put *[but:ipsum] 115 ▶ bar 116 ▶ foo 117 ▶ lorem 118 // Nonexistent files can also be excluded 119 ~> put *[but:foobar][but:ipsum] 120 ▶ bar 121 ▶ foo 122 ▶ lorem 123 124 ## type ## 125 ~> use os 126 put d1 d2 .d b b/c | each $os:mkdir~ 127 put bar foo ipsum lorem d1/f1 d2/fm | each {|x| echo > $x} 128 ~> put **[type:dir] 129 ▶ b/c 130 ▶ b 131 ▶ d1 132 ▶ d2 133 ~> put **[type:regular]m 134 ▶ d2/fm 135 ▶ ipsum 136 ▶ lorem 137 ~> put **[type:regular]f* 138 ▶ d1/f1 139 ▶ d2/fm 140 ▶ foo 141 ~> put **f*[type:regular] 142 ▶ d1/f1 143 ▶ d2/fm 144 ▶ foo 145 ~> put *[type:dir][type:regular] 146 Exception: only one type modifier allowed 147 [tty]:1:5-29: put *[type:dir][type:regular] 148 ~> put **[type:dir]f*[type:regular] 149 Exception: only one type modifier allowed 150 [tty]:1:5-32: put **[type:dir]f*[type:regular] 151 ~> put **[type:unknown] 152 Exception: unknown type modifier 153 [tty]:1:5-20: put **[type:unknown] 154 155 ## bad operations ## 156 ~> put *[[]] 157 Exception: modifier must be string 158 [tty]:1:5-9: put *[[]] 159 ~> put *[bad-mod] 160 Exception: unknown modifier bad-mod 161 [tty]:1:5-14: put *[bad-mod] 162 ~> put *{ } 163 Exception: cannot concatenate glob-pattern and fn 164 [tty]:1:5-8: put *{ } 165 ~> put { }* 166 Exception: cannot concatenate fn and glob-pattern 167 [tty]:1:5-8: put { }*