0

我遇到了一个似乎无法解决的非常简单的问题,而我从 bash 获得的唯一帮助是它是一个糟糕的替代品。有什么帮助吗?

#!/bin/bash
lang=Python
frameworks=('Python=(Django Flask Pyramid)' 'Ruby=(Rails Cuba)')
for i in "${frameworks[@]}";do eval $i;done
echo "Python ${#$lang[@]} ${$lang[@]}"
echo "Ruby ${#Ruby[@]} ${Ruby[@]}"

上面的第 5 行是引发错误的原因,但第 6 行工作正常,应该做同样的事情吗?

输出:

>>>line 5: Python ${#$lang[@]} ${$lang[@]}: bad substitution
>>>Ruby 2 Rails Cuba
4

2 回答 2

2

您不能$lang以这种方式使用(显然)。bash 数组构造${name[@]}有点神圣。如果您想以$lang这种方式尊重,您将需要另一个eval.

试试这个:

eval "echo \"Python  \${#$lang[@]} \${$lang[@]}\""
于 2016-04-28T00:49:05.937 回答
1

使用间接。在这种情况下,将要扩展的内容分配给变量,Python[@]然后使用${!thatvariable}

mything="$lang[@]"
echo "${!mything}"
于 2016-04-28T01:46:00.757 回答