请查看以下命令,(shell为 sh )
我不清楚的事情
当我运行 - eval echo \ $ arr $ n 时,我按预期获得值 a
为什么: VAL =`eval echo \ $ arr $ n << / / strong>, echo $ VAL 不打印相同的值 a ?
在arr1中设置一个值
# n=1
# eval arr$n=a
从arr1
打印一个值# n=1
# eval echo \$arr$n
a
将 eval echo \ $ arr $ n 设置为 VAL ,然后打印 $ VAL
# VAL=` eval echo \$arr$n `
# echo $VAL
{*}1
需要修复命令 - VAL =`eval echo \ $ arr $ n << / / strong>,所以当我回显$ VAL 时,我会得到值< strong> a ?
答案 0 :(得分:0)
使用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]}"