238 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Text
		
	
	
		
			Executable file
		
	
	
	
	
| # 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 "$*"
 | |
| 
 | |
| 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
 | |
| 
 | |
| # 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
 | |
| 
 | |
| # tests for various expansions of $* in different contexts -- word split,
 | |
| # no splitting, etc. when $IFS is NUL
 | |
| ${THIS_SH} ./dollar-star2.sub
 | |
| 
 | |
| # tests for expansions of "${array[*]}" and "${array[@]}" when $IFS is not the
 | |
| # default and the array contains null elements
 | |
| ${THIS_SH} ./dollar-star3.sub
 | |
| 
 | |
| # 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
 | |
| 
 | |
| exit 0
 | 
