1 #!/bin/bash
2 #
3 # Snippets from http://landley.net/notes.html
4 #
5 # Usage:
6 # test/toysh.sh
7
8 #### @Q
9 # http://landley.net/notes.html#24-06-2020
10
11 # Fix these
12 case $SH in (dash|mksh|zsh) exit ;; esac
13
14 xx() { echo "${*@Q}";}; xx a b c d
15 xx() { echo "${@@Q}";}; xx a b c d
16 ## STDOUT:
17 'a' 'b' 'c' 'd'
18 'a' 'b' 'c' 'd'
19 ## END
20 ## OK osh STDOUT:
21 a b c d
22 a b c d
23 ## END
24 ## N-I dash/mksh/zsh stdout-json: ""
25
26 #### extglob 1 - OSH only supports extglob for fnmatch()?
27 rm * # setup
28 # http://landley.net/notes.html#12-06-2020
29 shopt -s extglob
30
31 touch abc\)d
32 echo ab+(c?d)
33
34 IFS=c ABC="c?d"
35 echo ab+($ABC)
36
37 ABC='*'
38 echo $ABC
39
40 ## STDOUT:
41 abc)d
42 ab+( ?d)
43 abc)d _tmp
44 ## END
45 ## OK mksh STDOUT:
46 abc)d
47 ab+( ?d)
48 _tmp abc)d
49 ## END
50
51 #### extglob 2
52 # http://landley.net/notes.html#17-05-2020
53
54 shopt -s extglob # required for bash, not osh
55 IFS=x; ABC=cxd; for i in +($ABC); do echo =$i=; done
56
57 ## STDOUT:
58 =+(c=
59 =d)=
60 ## END
61
62 #### char class / extglob
63 # http://landley.net/notes.html#14-05-2020
64 shopt -s extglob
65
66 rm *
67
68 touch l; echo [hello"]"
69
70 touch b
71 echo [$(echo abc)]
72
73 touch +
74 echo [+()]
75 echo [+(])
76 ## STDOUT:
77 [hello]
78 b
79 +
80 [+(])
81 ## END
82 ## BUG mksh STDOUT:
83 [hello]
84 b
85 [+()]
86 [+(])
87 ## END
88
89 #### patsub of $* - http://landley.net/notes.html#23-04-2020
90 chicken() { echo ${*/b c/ghi}; }; chicken a b c d
91 ## STDOUT:
92 a b c d
93 ## END
94 ## BUG mksh stdout-json: ""
95 ## BUG mksh status: 1
96
97
98 #### Brace Expansion (known difference)
99 # http://landley.net/notes.html#04-01-2020
100
101 HOME=/home/foo
102
103 echo {~,~root}/pwd
104 echo \{~,~root}/pwd
105 echo ""{~,~root}/pwd
106
107 ## STDOUT:
108 ~/pwd ~root/pwd
109 {~,~root}/pwd
110 ~/pwd ~root/pwd
111 ## END
112 ## OK bash STDOUT:
113 /home/foo/pwd /root/pwd
114 {~,~root}/pwd
115 ~/pwd ~root/pwd
116 ## END
117
118 #### {abc}<<< - http://landley.net/notes-2019.html#09-12-2019
119 { echo; } {abc}<<< walrus
120 cat <&$abc
121 ## STDOUT:
122
123 walrus
124 ## END
125 ## N-I mksh stdout-json: ""
126 ## N-I mksh status: 1
127
128 #### slice of @ and @ - http://landley.net/notes.html#23-04-2020
129 IFS=x; X=x; eval abc=a${X}b
130
131 chicken() { for i in "${@:3:5}"; do echo =$i=; done; } ; chicken ab cd ef gh ij kl mn op qr
132
133 chicken() { for i in "${*:3:5}"; do echo =$i=; done; } ; chicken ab cd ef gh ij kl mn op qr
134
135 ## STDOUT:
136 =ef=
137 =gh=
138 =ij=
139 =kl=
140 =mn=
141 =ef gh ij kl mn=
142 ## END
143 ## N-I mksh stdout-json: ""
144 ## N-I mksh status: 1
145