sh +如何运行命令并将其设置为参数(VAL)

时间:2014-07-03 14:54:28

标签: arrays linux shell sh

请查看以下命令,(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

1 个答案:

答案 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]}"