I am a bit stuck. My task is to print the arguments to my script in reverse order except the third and fourth.What I have is this code:#!/bin/bashi=$#for arg in $@do    case $i    in        3) ;;        4) ;;        *) eval echo $i. Parameter: \$$i;;    esac    i=`expr $i - 1`doneAs I hate eval (greetings to PHP), I am looking for a solution without it but I am not able to find one.How can I define the position of the argument dynamically?PS: No its not a homework, I am learning shell for an exam so I try to solve old exams.
Print shell arguments in reverse order
bash;shell script;parameter
eval is the only portable way to access a positional parameter by its dynamically-chosen position. Your script would be clearer if you explicitly looped on the index rather than the values (which you aren't using). Note that you don't need expr unless you want your script to run in antique Bourne shells; $(()) arithmetic is in POSIX. Limit the use of eval to the smallest possible fragment; for example, don't use eval echo, assign the value to a temporary variable.i=$#while [ $i -gt 0 ]; do  if [ $i -ne 3 ] && [ $i -ne 2 ]; then    eval value=\${$i}    echo Parameter $i is $value  fi  i=$((i-1))doneIn bash, you can use ${!i} to mean the value of the parameter whose name is $i. This works when $i is either a named parameter or a number (denoting a positional parameter). While you're at it, you can make use of other bash convenience features.for ((i=$#; i>0; i--)); do  if ((i != 3 && i != 4)); then    echo Parameter $i is ${!i}  fidone