请查看以下命令(shell是sh)
我不太清楚的事情
当我运行-eval echo \ $ arr $ n时,得到的值a如预期
那么为什么:VAL =`eval echo \ $ arr $ n`和echo $ VAL不会输出相同的值a?
在arr1中设置一个值
# n=1
# eval arr$n=a
从arr1打印一个值
# n=1
# eval echo \$arr$n
a
在VAL中设置eval echo \ $ arr $ n并打印$ VAL
# VAL=` eval echo \$arr$n `
# echo $VAL
{*}1
什么需要在命令中修复-VAL =`eval echo \ $ arr $ n`,所以当我执行echo $ VAL时,我将得到值a?
最佳答案
使用Bash 3.2进行测试(在Mac OS X 10.9.4上)以sh
运行:
sh-3.2$ n=1
sh-3.2$ eval arr$n=a
sh-3.2$ eval echo \$arr$n
a
sh-3.2$ VAL=`eval echo \$arr$n`
sh-3.2$ echo $VAL
1
sh-3.2$ VAL=$(eval echo \$arr$n)
sh-3.2$ echo $VAL
a
sh-3.2$ VAL=`eval echo \$arr$n`
sh-3.2$ echo $VAL
1
sh-3.2$ VAL=`eval echo \\$arr$n`
sh-3.2$ echo $VAL
a
sh-3.2$ arr=xyz
sh-3.2$ VAL=`eval echo \$arr$n`
sh-3.2$ echo $VAL
xyz1
sh-3.2$
请注意,使用反引号和
$(…)
是有区别的。我建议使用$(…)
,因为它更易于理解。如果要坚持使用反斜杠,请将反斜杠加倍。 (我不太确定为什么会这样,但是经验证据表明您需要这样做。)如果要使用数组,请使用数组:
arr=('' a)
echo "${arr[1]}"