我有一个包含以下几行的小脚本
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
输出:
mom
dad
这条线在做什么eval X=\$$i
?
我理解其余的行,但我不理解这个 for 循环与 eval 的迭代。有人可以阐明这一点吗?我正在使用带有 Korn Shell 的 Solaris 5.10。
答案1
eval
对该行的其余部分执行额外级别的替换和处理。
在循环的第一次迭代中,i 设置为“VAR1”,并且减少了一级反斜杠转义,因此:
eval X=\$$i
变成:
X=$VAR1
其计算结果为:
X=mom
(重复下一个循环,只有 $i 是 VAR2,并且 $VAR2=dad)