我有一个看起来很简单的问题似乎无法修复,而我从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
答案 0 :(得分:2)
使用间接。将要展开的内容分配给变量,在本例中为Python[@]
,然后使用${!thatvariable}
:
mything="$lang[@]"
echo "${!mything}"
答案 1 :(得分:1)
你不能以这种方式使用$lang
(显然)。 bash数组构造${name[@]}
有点神圣。如果您想以这种方式尊重$lang
,则需要另一个eval
。
请改为尝试:
eval "echo \"Python \${#$lang[@]} \${$lang[@]}\""