147

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

Oded
  • 489,969
  • 99
  • 883
  • 1,009
Ashitosh
  • 1,652
  • 3
  • 12
  • 11
  • 9
    Note that having 10 parameters will make it quite confusing. Perhaps it would be better to use options (e.g. `-a 1` or `--foo=bar`) instead. See `man getopt`, `man getopts`, and `man bash` for some options for doing that. – Mikel Feb 06 '11 at 10:34
  • See also: [Why do bash command line arguments after 9 require curly brackets?](https://stackoverflow.com/questions/18318716/why-do-bash-command-line-arguments-after-9-require-curly-brackets) – John Kugelman Apr 03 '20 at 16:37

2 Answers2

231

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
Dennis Williamson
  • 346,391
  • 90
  • 374
  • 439
  • 4
    Note that ${10} will work in bash, but will limit your portability since many implementations of sh only allow single digit specifications. – William Pursell Feb 06 '11 at 14:11
  • 1
    @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. – Dennis Williamson Feb 06 '11 at 15:34
  • 2
    @WilliamPursell `${10}` is defined [by POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02) – Zombo Dec 09 '16 at 19:15
  • 3
    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. – William Pursell Dec 10 '16 at 16:54
38

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

${255}
szafran
  • 55
  • 1
  • 11
lukuluku
  • 4,344
  • 3
  • 30
  • 35