坏的替代?

时间:2016-04-28 00:43:15

标签: bash bash4

我有一个看起来很简单的问题似乎无法修复,而我从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

2 个答案:

答案 0 :(得分:2)

使用间接。将要展开的内容分配给变量,在本例中为Python[@],然后使用${!thatvariable}

mything="$lang[@]"
echo "${!mything}"

答案 1 :(得分:1)

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

请改为尝试:

eval "echo \"Python  \${#$lang[@]} \${$lang[@]}\""