how to loop through arguments in a bash script

39,500

Solution 1

There's a special syntax for this:

for i do
  printf '%s\n' "$i"
done

More generally, the list of parameters of the current script or function is available through the special variable $@.

for i in "$@"; do
  printf '%s\n' "$i"
done

Note that you need the double quotes around $@, otherwise the parameters undergo wildcard expansion and field splitting. "$@" is magic: despite the double quotes, it expands into as many fields as there are parameters.

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing

Solution 2

#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

You should quote $@ because it is possible for arguments to contain spaces (or newlines, etc.) if you quote them, or escape them with a \. For example:

./myscript one 'two three'

That's two arguments rather than three, due to the quotes. If you don't quote $@, those arguments will be broken up within the script.

Share:
39,500

Related videos on Youtube

rubo77
Author by

rubo77

SCHWUPPS-DI-WUPPS

Updated on September 18, 2022

Comments

  • rubo77
    rubo77 almost 2 years

    I would like to write a bash script with unknown amount of arguments.

    How can I walk through these arguments and do something with them?

    A wrong attempt would look like this:

    #!/bin/bash
    for i in $args; do 
        echo $i
    done