| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | # first, let's start with the basics | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | recho "$*" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho $@ | 
					
						
							|  |  |  | recho $* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set a b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho "$*" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # If IFS is null, the parameters are joined without separators | 
					
						
							|  |  |  | IFS='' | 
					
						
							|  |  |  | recho "$*" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # If IFS is unset, the parameters are separated by spaces | 
					
						
							|  |  |  | unset IFS | 
					
						
							|  |  |  | recho "${*}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | recho $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IFS='/' | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set $* | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set ${*} | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set $@ | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set ${@} | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # according to POSIX.2, unquoted $* should expand to multiple words if | 
					
						
							|  |  |  | # $IFS is null, just like unquoted $@ | 
					
						
							|  |  |  | IFS='' | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set $* | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set $@ | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # if IFS is unset, the individual positional parameters are split on | 
					
						
							|  |  |  | # " \t\n" if $* or $@ are unquoted | 
					
						
							|  |  |  | unset IFS | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set $* | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set $@   | 
					
						
							|  |  |  | recho $#                                               | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # but not for "$@" or "$*" | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set "$*" | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set bob 'tom dick harry' joe | 
					
						
							|  |  |  | set "$@" | 
					
						
							|  |  |  | recho $# | 
					
						
							|  |  |  | recho $1 | 
					
						
							|  |  |  | recho $2 | 
					
						
							|  |  |  | recho $3 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # POSIX.2 says these should both expand the positional parameters | 
					
						
							|  |  |  | # to multiple words | 
					
						
							|  |  |  | set a b c d e | 
					
						
							|  |  |  | IFS="" | 
					
						
							|  |  |  | recho $@ | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # this example is straight from the POSIX.2 rationale | 
					
						
							|  |  |  | set foo bar bam | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | recho "$*" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unset IFS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | recho "$@" | 
					
						
							|  |  |  | recho $@ | 
					
						
							|  |  |  | recho "$*" | 
					
						
							| 
									
										
										
										
											2001-04-06 19:14:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | IFS=: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # special variables | 
					
						
							|  |  |  | set -- 1 2 3 4 5 6 7 8 9 10 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bar=${*} | 
					
						
							|  |  |  | foo=$* | 
					
						
							|  |  |  | echo foo = "$foo" | 
					
						
							|  |  |  | echo bar = "$bar" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | foo1=$@ | 
					
						
							|  |  |  | bar1=${@} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo foo1 = "$foo1" | 
					
						
							|  |  |  | echo bar1 = "$bar1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | foo2="$*" | 
					
						
							|  |  |  | bar2="${*}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo foo2 = "$foo2" | 
					
						
							|  |  |  | echo bar2 = "$bar2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | eval foo3='$*' bar3='${*}' | 
					
						
							|  |  |  | echo foo3 = "$foo3" | 
					
						
							|  |  |  | echo bar3 = "$bar3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $* in | 
					
						
							|  |  |  | *\:*)	echo ok 1;; | 
					
						
							|  |  |  | *)	echo bad 1;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $@ in | 
					
						
							|  |  |  | *\:*)	echo bad 2;; | 
					
						
							|  |  |  | *)	echo ok 2;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "$*" in | 
					
						
							|  |  |  | *\:*)	echo ok 3;; | 
					
						
							|  |  |  | *)	echo bad 3;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "$@" in | 
					
						
							|  |  |  | *\:*)	echo bad 4;; | 
					
						
							|  |  |  | *)	echo ok 4;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IFS=$' \t\n' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bar=${*} | 
					
						
							|  |  |  | foo=$* | 
					
						
							|  |  |  | echo foo = "$foo" | 
					
						
							|  |  |  | echo bar = "$bar" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | foo1=$@ | 
					
						
							|  |  |  | bar1=${@} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo foo1 = "$foo1" | 
					
						
							|  |  |  | echo bar1 = "$bar1" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | foo2="$*" | 
					
						
							|  |  |  | bar2="${*}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo foo2 = "$foo2" | 
					
						
							|  |  |  | echo bar2 = "$bar2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | eval foo3='$*' bar3='${*}' | 
					
						
							|  |  |  | echo foo3 = "$foo3" | 
					
						
							|  |  |  | echo bar3 = "$bar3" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $* in | 
					
						
							|  |  |  | *\ *)	echo ok 1;; | 
					
						
							|  |  |  | *)	echo bad 1;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case $@ in | 
					
						
							|  |  |  | *\ *)	echo ok 2;; | 
					
						
							|  |  |  | *)	echo bad 2;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "$*" in | 
					
						
							|  |  |  | *\ *)	echo ok 3;; | 
					
						
							|  |  |  | *)	echo bad 3;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "$@" in | 
					
						
							|  |  |  | *\ *)	echo ok 4;; | 
					
						
							|  |  |  | *)	echo bad 4;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-26 09:36:43 -05:00
										 |  |  | # tests for the effect of quoting $* and $@ in an assignment context (plus | 
					
						
							|  |  |  | # arrays) -- bugs through bash 4.2 | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star1.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 16:59:08 -04:00
										 |  |  | # more tests for expanding $@ and $* in a context where there is no word | 
					
						
							|  |  |  | # splitting | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star2.sub | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star3.sub | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star4.sub | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star5.sub | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star6.sub | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star7.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for expansions of $@ and ${a[@]} (vs. $* and ${a[*]}) on the RHS of | 
					
						
							|  |  |  | # assignment statements with non-default IFS: $@ expands to args or array | 
					
						
							|  |  |  | # members separated by spaces | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at-star8.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  | # tests for special expansion of "$*" and "${array[*]}" when used with other | 
					
						
							|  |  |  | # expansions -- bugs through bash-2.05b | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star1.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for expansion of "$@" on rhs of things like ${param:+word}.  Bugs | 
					
						
							|  |  |  | # though bash-2.05b | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at1.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for expansion of other variables in double-quoted strings containing | 
					
						
							|  |  |  | # $@.  Bugs through bash-2.05b | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at2.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-07 14:08:12 +00:00
										 |  |  | # tests for various expansions of $* in different contexts -- word split, | 
					
						
							|  |  |  | # no splitting, etc. when $IFS is NUL | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star2.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  | # tests for expansions of "${array[*]}" and "${array[@]}" when $IFS is not the | 
					
						
							|  |  |  | # default and the array contains null elements | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star3.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-21 20:51:19 -05:00
										 |  |  | # test for set -u and expansions of $@ when there are no positional parameters | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at3.sub | 
					
						
							|  |  |  | # test for set -u and expansions of $* when there are no positional parameters | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star4.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for expansions of $* when IFS is null | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star5.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-26 09:36:43 -05:00
										 |  |  | # tests for inappropriate word splitting through bash-4.2 | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at4.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for problems with "$@" preceded and followed by other quoted expansions | 
					
						
							|  |  |  | # through bash-4.2 | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at5.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for problems with "${@:1}" and other expansions with null entries | 
					
						
							|  |  |  | # in positional parameters | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-at6.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for expansions of $* when $1 == ""; problem through bash-4.2 | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star6.sub | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests for expansions of $* (unquoted) when IFS changes (e.g., ${IFS:=-}) | 
					
						
							|  |  |  | # problem through bash-4.2 | 
					
						
							|  |  |  | ${THIS_SH} ./dollar-star7.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-06 19:14:31 +00:00
										 |  |  | exit 0 |