Bash Function: Find Number Of Arguments Passed

How do I find out number of arguments passed to my bash function called foo() under Unix like operating systems?

Each bash shell function has the following set of shell variables:


[a] All function parameters or arguments can be accessed via $1, $2, $3,..., $N.

Tutorial details
Difficulty Easy (rss)
Root privileges No
Requirements Bash
Time N/A
[b] $* or $@ holds all parameters or arguments passed to the function.

[c] $# holds the number of positional parameters passed to the function.

[d] An array variable called FUNCNAME ontains the names of all shell functions currently in the execution call stack.


Create a shell script as follows:

# Purpose: Demo bash function
# Author: nixCraft
# -----------------------------
## Define a function called foo()
  echo "Function name:  ${FUNCNAME}"
  echo "The number of positional parameter : $#"
  echo "All parameters or arguments passed to the function: '$@'"
## Call or invoke the function ##
## Pass the parameters or arguments  ##
foo nixCraft
foo 1 2 3 4 5
foo "this" "is" "a" "test"

Run it as follows:
$ chmod +x
$ ./

Sample outputs:

Fig.01: Bash function displaying number of arguments passed to foo()

Fig.01: Bash function displaying number of arguments passed to foo()

See also
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04

1 comment… add one
  • Z. May 8, 2013 @ 1:14

    Try using the special variable ${#}.

    function foo {
    echo “N. of Args: ${#}”

    $ foo a b c

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.