eval X=\$$i 在 UNIX 中是什么意思?

ayr*_*nna 3 scripting solaris eval

我有一个带有以下几行的小脚本

echo mom,dad |awk -F, '{print $1,$2}' | while read VAR1 VAR2
do
 for i in VAR1 VAR2
  do
   eval X=\$$i
   echo $X
 done  
done
Run Code Online (Sandbox Code Playgroud)

输出:

mom
dad
Run Code Online (Sandbox Code Playgroud)

这条线在做什么eval X=\$$i

我理解其余的行,但我不理解这个 for 循环与 eval 的迭代。有人可以解释一下吗?我正在将 Solaris 5.10 与 Korn Shell 一起使用。

Jef*_*ler 12

eval 对行的其余部分执行额外级别的替换和处理。

在循环的第一次迭代中,i 设置为“VAR1”,并且减少了一级反斜杠转义,因此:

eval X=\$$i
Run Code Online (Sandbox Code Playgroud)

变成:

X=$VAR1
Run Code Online (Sandbox Code Playgroud)

其评估为:

X=mom
Run Code Online (Sandbox Code Playgroud)

(重复下一个循环,只有 $i 是 VAR2,而 $VAR2=dad)