1 |
#!/bin/bash |
2 |
# |
3 |
# Tests for quotes. |
4 |
|
5 |
### Unquoted words |
6 |
echo unquoted words |
7 |
# stdout: unquoted words |
8 |
|
9 |
### Single-quoted |
10 |
echo 'single quoted' |
11 |
# stdout: single quoted |
12 |
|
13 |
### Two single-quoted parts |
14 |
echo 'two single-quoted pa''rts in one token' |
15 |
# stdout: two single-quoted parts in one token |
16 |
|
17 |
### Unquoted and single quoted |
18 |
echo unquoted' and single-quoted' |
19 |
# stdout: unquoted and single-quoted |
20 |
|
21 |
### newline inside single-quoted string |
22 |
echo 'newline |
23 |
inside single-quoted string' |
24 |
# stdout-json: "newline\ninside single-quoted string\n" |
25 |
|
26 |
### Double-quoted |
27 |
echo "double quoted" |
28 |
# stdout: double quoted |
29 |
|
30 |
### Mix of quotes in one word |
31 |
echo unquoted' single-quoted'" double-quoted "unquoted |
32 |
# stdout: unquoted single-quoted double-quoted unquoted |
33 |
|
34 |
### Var substitution |
35 |
FOO=bar |
36 |
echo "==$FOO==" |
37 |
# stdout: ==bar== |
38 |
|
39 |
### Var substitution with braces |
40 |
FOO=bar |
41 |
echo foo${FOO} |
42 |
# stdout: foobar |
43 |
|
44 |
### Var substitution with braces, quoted |
45 |
FOO=bar |
46 |
echo "foo${FOO}" |
47 |
# stdout: foobar |
48 |
|
49 |
### Var length |
50 |
FOO=bar |
51 |
echo "foo${#FOO}" |
52 |
# stdout: foo3 |
53 |
|
54 |
### Backslash escapes |
55 |
echo \$ \| \a \b \c \d \\ |
56 |
# stdout: $ | a b c d \ |
57 |
|
58 |
### Backslash escapes inside double quoted string |
59 |
echo "\$ \\ \\ \p \q" |
60 |
# stdout: $ \ \ \p \q |
61 |
|
62 |
### C-style backslash escapes inside double quoted string |
63 |
# mksh and dash implement POSIX incompatible extensions. $ ` " \ <newline> |
64 |
# are the only special ones |
65 |
echo "\a \b" |
66 |
# stdout: \a \b |
67 |
# BUG dash/mksh stdout-json: "\u0007 \u0008\n" |
68 |
|
69 |
# BUG |
70 |
|
71 |
### Literal $ |
72 |
echo $ |
73 |
# stdout: $ |
74 |
|
75 |
### Quoted Literal $ |
76 |
echo $ "$" $ |
77 |
# stdout: $ $ $ |
78 |
|
79 |
### Line continuation |
80 |
echo foo\ |
81 |
$ |
82 |
# stdout: foo$ |
83 |
|
84 |
### $? split over multiple lines |
85 |
# Same with $$, etc. OSH won't do this because $? is a single token. |
86 |
echo $\ |
87 |
? |
88 |
# stdout: $? |
89 |
# OK bash/mksh stdout: 0 |
90 |
|
91 |
# |
92 |
# Bad quotes |
93 |
# |
94 |
|
95 |
# TODO: Also test unterminated quotes inside ${} and $() |
96 |
|
97 |
### Unterminated single quote |
98 |
# code: ls foo bar ' |
99 |
# status: 2 |
100 |
# OK mksh status: 1 |
101 |
|
102 |
### Unterminated double quote |
103 |
# code: ls foo bar " |
104 |
# status: 2 |
105 |
# OK mksh status: 1 |
106 |
|
107 |
|
108 |
# |
109 |
# TODO: Might be another section? |
110 |
# |
111 |
|
112 |
### Semicolon |
113 |
echo separated; echo by semi-colon |
114 |
# stdout-json: "separated\nby semi-colon\n" |
115 |
|
116 |
# |
117 |
# TODO: Variable substitution operators. |
118 |
# |
119 |
|
120 |
### No tab escapes within single quotes |
121 |
# dash and mksh allow this, which is a BUG. |
122 |
# POSIX says: "Enclosing characters in single-quotes ( '' ) shall preserve the |
123 |
# literal value of each character within the single-quotes. A single-quote |
124 |
# cannot occur within single-quotes" |
125 |
echo 'a\tb' |
126 |
# stdout: a\tb |
127 |
# BUG dash/mksh stdout-json: "a\tb\n" |
128 |
|
129 |
# See if it supports ANSI C escapes. Bash supports this, but dash does NOT. I |
130 |
# guess dash you would do IFS=$(printf '\n\t') |
131 |
|
132 |
### $'' |
133 |
echo $'foo' |
134 |
# stdout: foo |
135 |
# N-I dash stdout: $foo |
136 |
|
137 |
### $'' with newlines |
138 |
echo $'col1\ncol2\ncol3' |
139 |
# stdout-json: "col1\ncol2\ncol3\n" |
140 |
# In dash, \n is special within single quotes |
141 |
# N-I dash stdout-json: "$col1\ncol2\ncol3\n" |
142 |
|
143 |
### $"" |
144 |
echo $"foo" |
145 |
# stdout: foo |
146 |
# N-I dash stdout: $foo |
147 |
|
148 |
### printf |
149 |
# This accepts \t by itself, hm. |
150 |
printf "c1\tc2\nc3\tc4\n" |
151 |
# stdout-json: "c1\tc2\nc3\tc4\n" |