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}
Comments
-
Ashitosh about 4 years
I am using bash shell on linux and want to use more than 10 parameters in shell script
-
SourceSeeker over 13 yearsI 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 over 13 yearsNote that ${10} will work in bash, but will limit your portability since many implementations of sh only allow single digit specifications.
-
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 over 7 years@WilliamPursell
${10}
is defined by POSIX -
Zombo over 7 yearsMy shell comfortably goes up to 2 million
set $(seq 2097152); echo ${2097152}
-
William Pursell over 7 yearsWorrying 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.