Patch-ID: bash32-029
[bash.git] / tests / dollar-at-star
blob25c24435b5b84e14753b5b811cabc2946a634031
1 # first, let's start with the basics
3 recho "$@"
4 recho "$*"
6 recho $@
7 recho $*
9 set a b
11 recho "$*"
13 # If IFS is null, the parameters are joined without separators
14 IFS=''
15 recho "$*"
17 # If IFS is unset, the parameters are separated by spaces
18 unset IFS
19 recho "${*}"
21 recho "$@"
22 recho $@
24 IFS='/'
25 set bob 'tom dick harry' joe
26 set $*
27 recho $#
28 recho $1
29 recho $2
30 recho $3
32 set bob 'tom dick harry' joe
33 set ${*}
34 recho $#
35 recho $1
36 recho $2
37 recho $3
39 set bob 'tom dick harry' joe
40 set $@
41 recho $#
42 recho $1
43 recho $2
44 recho $3
46 set bob 'tom dick harry' joe
47 set ${@}
48 recho $#
49 recho $1
50 recho $2
51 recho $3
53 # according to POSIX.2, unquoted $* should expand to multiple words if
54 # $IFS is null, just like unquoted $@
55 IFS=''
56 set bob 'tom dick harry' joe
57 set $*
58 recho $#
59 recho $1
60 recho $2
61 recho $3
63 set bob 'tom dick harry' joe
64 set $@
65 recho $#
66 recho $1
67 recho $2
68 recho $3
70 # if IFS is unset, the individual positional parameters are split on
71 # " \t\n" if $* or $@ are unquoted
72 unset IFS
73 set bob 'tom dick harry' joe
74 set $*
75 recho $#
76 recho $1
77 recho $2
78 recho $3
80 set bob 'tom dick harry' joe
81 set $@  
82 recho $#                                              
83 recho $1
84 recho $2
85 recho $3
87 # but not for "$@" or "$*"
88 set bob 'tom dick harry' joe
89 set "$*"
90 recho $#
91 recho $1
92 recho $2
93 recho $3
95 set bob 'tom dick harry' joe
96 set "$@"
97 recho $#
98 recho $1
99 recho $2
100 recho $3
102 # POSIX.2 says these should both expand the positional parameters
103 # to multiple words
104 set a b c d e
105 IFS=""
106 recho $@
107 recho "$@"
109 # this example is straight from the POSIX.2 rationale
110 set foo bar bam
112 recho "$@"
113 recho "$*"
115 unset IFS
117 recho "$@"
118 recho $@
119 recho "$*"
121 IFS=:
123 # special variables
124 set -- 1 2 3 4 5 6 7 8 9 10
126 bar=${*}
127 foo=$*
128 echo foo = "$foo"
129 echo bar = "$bar"
131 foo1=$@
132 bar1=${@}
134 echo foo1 = "$foo1"
135 echo bar1 = "$bar1"
137 foo2="$*"
138 bar2="${*}"
140 echo foo2 = "$foo2"
141 echo bar2 = "$bar2"
143 eval foo3='$*' bar3='${*}'
144 echo foo3 = "$foo3"
145 echo bar3 = "$bar3"
147 case $* in
148 *\:*)   echo ok 1;;
149 *)      echo bad 1;;
150 esac
152 case $@ in
153 *\:*)   echo bad 2;;
154 *)      echo ok 2;;
155 esac
157 case "$*" in
158 *\:*)   echo ok 3;;
159 *)      echo bad 3;;
160 esac
162 case "$@" in
163 *\:*)   echo bad 4;;
164 *)      echo ok 4;;
165 esac
167 IFS=$' \t\n'
169 bar=${*}
170 foo=$*
171 echo foo = "$foo"
172 echo bar = "$bar"
174 foo1=$@
175 bar1=${@}
177 echo foo1 = "$foo1"
178 echo bar1 = "$bar1"
180 foo2="$*"
181 bar2="${*}"
183 echo foo2 = "$foo2"
184 echo bar2 = "$bar2"
186 eval foo3='$*' bar3='${*}'
187 echo foo3 = "$foo3"
188 echo bar3 = "$bar3"
190 case $* in
191 *\ *)   echo ok 1;;
192 *)      echo bad 1;;
193 esac
195 case $@ in
196 *\ *)   echo ok 2;;
197 *)      echo bad 2;;
198 esac
200 case "$*" in
201 *\ *)   echo ok 3;;
202 *)      echo bad 3;;
203 esac
205 case "$@" in
206 *\ *)   echo ok 4;;
207 *)      echo bad 4;;
208 esac
210 # tests for special expansion of "$*" and "${array[*]}" when used with other
211 # expansions -- bugs through bash-2.05b
212 ${THIS_SH} ./dollar-star1.sub
214 # tests for expansion of "$@" on rhs of things like ${param:+word}.  Bugs
215 # though bash-2.05b
216 ${THIS_SH} ./dollar-at1.sub
218 # tests for expansion of other variables in double-quoted strings containing
219 # $@.  Bugs through bash-2.05b
220 ${THIS_SH} ./dollar-at2.sub
222 # tests for various expansions of $* in different contexts -- word split,
223 # no splitting, etc. when $IFS is NUL
224 ${THIS_SH} ./dollar-star2.sub
226 exit 0