Iterate through parameters skipping the first

Bash

Bash Problem Overview


Hi i have the following:

bash_script parm1 a b c d ..n

I want to iterate and print all the values in the command line starting from a, not from parm1

Bash Solutions


Solution 1 - Bash

You can "slice" arrays in bash; instead of using shift, you might use

for i in "${@:2}"
do
    echo "$i"
done

$@ is an array of all the command line arguments, ${@:2} is the same array less the first element. The double-quotes ensure correct whitespace handling.

Solution 2 - Bash

This should do it:

#ignore first parm1
shift

# iterate
while test ${#} -gt 0
do
  echo $1
  shift
done

Solution 3 - Bash

This method will keep the first param, in case you want to use it later

#!/bin/bash

for ((i=2;i<=$#;i++))
do
  echo ${!i}
done

or

for i in ${*:2} #or use $@
do
  echo $i
done

Solution 4 - Bash

Another flavor, a bit shorter that keeps the arguments list

shift
for i in "$@"
do
  echo $i
done

Solution 5 - Bash

You can use an implicit iteration for the positional parameters:

shift
for arg
do
    something_with $arg
done

As you can see, you don't have to include "$@" in the for statement.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionpietView Question on Stackoverflow
Solution 1 - BashIsmail BadawiView Answer on Stackoverflow
Solution 2 - BashScharronView Answer on Stackoverflow
Solution 3 - Bashghostdog74View Answer on Stackoverflow
Solution 4 - BashDéjà vuView Answer on Stackoverflow
Solution 5 - BashDennis WilliamsonView Answer on Stackoverflow