Bash: back quotes and eval confusing behavior
bash, freebsd, linux, unix
Solution
This line:
set 5 10
makes positional parameters `$1=5` and makes `$2=10`
This line:
n=2
Sets shell variable `n to value 2`
Then this line:
eval echo \$$n
is effectively this:
echo $2
prints `$2` which is `10`
Finally this line:
echo `eval echo \$$n`
is same as (due to back ticks):
eval echo $$n
which is effectively this:
echo $$n
Prints `$$` (current shell PID) and literal `n` hence prints
10268n
Problem
Can someone explain the second result? ``` user$ set 5 5 user$ n=2 user$ eval echo \$$n 5 user$ echo `eval echo \$$n` 10268n ``` 10268 is bash pid. GNU bash, version 4.0.35(0)-release (i386-portbld-freebsd7.2) UPD: This works fine: ``` user$ echo `eval echo \\$$n` 5 ``` But then... ``` user$ echo `eval echo \\\$$n` #3 5 user$ echo `eval echo \\\\$$n` #4 10268n user$ echo `eval echo \\\\\$$n` #5 10268n user$ echo `eval echo \\\\\\$$n` #6 $2 user$ echo `eval echo \\\\\\\$$n` #7 $2 user$ echo `eval echo \\\\\\\\$$n` #8 $2 user$ echo `eval echo \\\\\\\\\$$n` #9 10268n ```