What Does $# Represent in Shell Scripting?


Heather Bennett

What Does $# Represent in Shell Scripting?

In shell scripting, the dollar sign followed by a hash symbol ($#) is a special variable that represents the number of arguments passed to a script or a function. This variable is incredibly useful when it comes to handling user input and creating dynamic scripts.

Understanding the Basics

Before we dive deeper into the usage of $# in shell scripting, let’s quickly recap the fundamental concepts. In the world of shell scripting, arguments are values that are passed to a script or a function when it is executed. These arguments can be anything from filenames, options, or even user-defined values.

When you run a script with arguments, they are automatically assigned to numbered variables: $1, $2, $3, and so on. The first argument is assigned to $1, the second to $2, and so forth.

But what if you want to know how many arguments were actually passed? This is where $# comes into play.

The Power of $#

The $# variable stores the number of arguments passed to your script or function. By referencing this variable within your code, you can access this information and use it for various purposes.

For example:


echo "The number of arguments passed: $#"

If we save this script as “argument_counter.sh” and run it with three arguments like this:

$ ./argument_counter.sh apple banana cherry

The output will be:

The number of arguments passed: 3

As you can see, by using the special variable $# in our script and referencing it with echo, we were able to display the number of arguments passed.

Practical Applications

The ability to retrieve the number of arguments can be extremely useful in various scenarios. Let’s explore a few practical applications:

1. Error Handling

When designing robust scripts, it’s essential to handle errors gracefully. By using $# along with conditional statements, you can easily detect if the script is being executed without the required number of arguments.

if [ $# -ne 2 ]; then
echo “Usage: $0 <arg1> <arg2>”
exit 1

# Rest of the script

In this example, if the script is executed without exactly two arguments, it will display an error message along with the correct usage and exit with a non-zero status code (1).

2. Looping Through Arguments

The number of arguments can also determine how many times you need to loop through them in your script.

for ((i=1; i<= $# ; i++)); do
echo “Argument $i: ${!i}”

In this snippet, we use a for loop to iterate through each argument passed. The ${!i} syntax accesses the value of the variable corresponding to the current iteration (e.g., $1 for i=1).


The special variable $# in shell scripting provides valuable information about the number of arguments passed to a script or function. By leveraging this variable, you can enhance your scripts by adding error handling, iterating through arguments, or performing any other logic based on the number of arguments.

Remember to use this powerful tool wisely and creatively to make your shell scripts more robust and efficient.

Discord Server - Web Server - Private Server - DNS Server - Object-Oriented Programming - Scripting - Data Types - Data Structures

Privacy Policy