2016-04-28 24 views
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 
+0

これは、[Bashのよくある質問006](http://mywiki.wooledge.org/BashFAQ/006)です。 –

答えて

1

あなたは(明らかに)このように$langを使用することはできません。 bash配列の構造${name[@]}はちょっと神聖です。 $langをこの方法で尊敬したい場合は、別のevalが必要です。

代わりにこれを試してみてください:

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

使用の間接化を。この場合Python[@]には、あなたが変数に拡張したいものを割り当て、その後、${!thatvariable}を使用します。

mything="$lang[@]" 
echo "${!mything}" 
関連する問題