echo_argc() { echo $# } a() { shift echo_argc "$@" echo_argc ${1:+"$@"} echo_argc "${1:+$@}" echo_argc 1 2 3 } b() { _IFS="$IFS" IFS="$1" shift echo_argc "$@" echo_argc ${1:+"$@"} echo_argc "${1:+$@}" echo_argc 1 2 3 IFS="$_IFS" } a "X" foo bar hoge b "X" foo bar hoge