How to handle more than 10 parameters in shell

85,893

Solution 1

Use curly braces to set them off:

echo "${10}"

Any positional parameter can be saved in a variable to document its use and make later statements more readable:

city_name=${10}

If fewer parameters are passed then the value at the later positions will be unset.

You can also iterate over the positional parameters like this:

for arg

or

for arg in "$@"

or

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

Solution 2

You can have up to 256 parameters from 0 to 255 with:

${255}
Share:
85,893
Ashitosh
Author by

Ashitosh

Ashitosh

Updated on March 29, 2020

Comments

  • Ashitosh
    Ashitosh about 4 years

    I am using bash shell on linux and want to use more than 10 parameters in shell script

  • SourceSeeker
    SourceSeeker over 13 years
    I think that limit is dependent on the shell. Bash, dash, ksh and zsh don't seem to have it. sh -c 'echo ${333}' /usr/bin/*
  • William Pursell
    William Pursell over 13 years
    Note that ${10} will work in bash, but will limit your portability since many implementations of sh only allow single digit specifications.
  • SourceSeeker
    SourceSeeker over 13 years
    @William: There are some shells that won't accept it, such as the original legacy Bourne shell, but in addition to the shells I listed in another comment (Bash, dash, ksh and zsh), it also works in csh, tcsh and Busybox ash.
  • Zombo
    Zombo over 7 years
    @WilliamPursell ${10} is defined by POSIX
  • Zombo
    Zombo over 7 years
    My shell comfortably goes up to 2 million set $(seq 2097152); echo ${2097152}
  • William Pursell
    William Pursell over 7 years
    Worrying about ${10} working is only necessary when using very old implementations which are not standard compliant. Probably only of historical interest...and yet I have yet to ever use it! I suppose because best practice dictates that 10 arguments is way too many unless they are repeated, in which case you'll iterate over them with "$@" rather than enumerating them.