# test the expansion of ${array[@]} and ${array[*]}, both quoted and # unquoted. the expansions should be exactly analogous to the # expansions of $@ and $* quoted and unquoted A=(a b) recho "${A[*]}" # If IFS is null, the parameters are joined without separators IFS='' recho "${A[*]}" # If IFS is unset, the parameters are separated by spaces unset IFS recho "${A[*]}" recho "${A[@]}" recho ${A[@]} IFS='/' A=(bob 'tom dick harry' joe) set ${A[*]} recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set ${A[*]} recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set ${A[@]} recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set ${A[@]} 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='' A=(bob 'tom dick harry' joe) set "${A[*]}" recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set ${A[*]} recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set ${A[@]} 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 A=(bob 'tom dick harry' joe) set ${A[*]} recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set ${A[@]} recho $# recho $1 recho $2 recho $3 # but not for "$@" or "$*" A=(bob 'tom dick harry' joe) set "${A[*]}" recho $# recho $1 recho $2 recho $3 A=(bob 'tom dick harry' joe) set "${A[@]}" recho $# recho $1 recho $2 recho $3 # these should both expand the value of A to multiple words A=(a b c d e) IFS="" recho ${A[@]} recho "${A[@]}" # this example is straight from the POSIX.2 rationale and adapted to arrays A=(foo bar bam) recho "${A[@]}" recho "${A[*]}" unset IFS recho "${A[@]}" recho ${A[@]} recho "${A[*]}"