我在Stackoverflow上發現了幾個類似的問題,但無法提取必要的bash ninja,所以我來帽子手中,以便有人向我暗示。 我正在使用bash腳本來下載一些貨幣報價。引號是在一個大的文本文件中,我使用grep並剪切來提取它們。到現在爲止還挺好。所有的報價都是針對美元的。我從一個月前和一年前的當前費率下載了三個文件。 這裏是我使用'declare'動態設置變量名稱的代碼。這一點工作正常。Bash shell腳本:動態生成數組變量
for CURRENCY in GBP HKD EUR
do
# Get rates against USD
declare -A $CURRENCY
TODAY=`grep $CURRENCY today.json | cut -f 2 -d: | tr -d "," | tr -d " "`
MONTH=`grep $CURRENCY month.json | cut -f 2 -d: | tr -d "," | tr -d " "`
YEAR=`grep $CURRENCY year.json | cut -f 2 -d: | tr -d "," | tr -d " "`
declare ${CURRENCY}[USD]=$TODAY
declare ${CURRENCY}[USD_M]=$MONTH
declare ${CURRENCY}[USD_Y]=$YEAR
# Get inverse rate
declare ${CURRENCY}[USD_I]=`echo "scale=5; 1/$TODAY" | bc`
declare ${CURRENCY}[USD_M_I]=`echo "scale=5; 1/$MONTH" | bc`
declare ${CURRENCY}[USD_Y_I]=`echo "scale=5; 1/$YEAR" | bc`
done
因此,現在,對於每種貨幣,例如,英鎊,我有鑰匙的陣列 - 這樣的值對:
${GBP[USD]} = 0.65
${GBP[USD_M]} = 0.63
${GBP[USD_Y]} = 0.70 etc.
權,所以後來我通過每一種貨幣要循環,併產生相互每種貨幣的價值。即獲得$ {GBP [HKD]} $ {GBP [EUR]} $ {HKD [GBP]} $ {HKD [EUR]} $ {EUR [HKD]} $ {EUR [HKD]}。這是它開始變得棘手的地方。
我開始另一個循環來嘗試這個,錯過了當貨幣與自己匹配時的情況(匯率= 1)。爲了獲得第一個價值,例如,我想將$ {GBP [USD]}除以$ {HKD [USD]}。
for CURRENCY in GPB HKD EUR
do
for TARGETCURRENCY in GPB HKD EUR
do
if [ "$TARGETCURRENCY" != "$CURRENCY" ]; then
echo "declare $CURRENCY[$TARGETCURRENCY]=\`echo \${$CURRENCY[USD]}/\${$TARGETCURRENCY[USD]} | bc\`"
fi
done
done
我可以附和我想在上面循環執行的命令,但如果我嘗試給eval它,我得到的消息「壞替代」。 我一直在反覆嘗試各種各樣的東西,甚至在其他問題中標記爲verboten的其他方法(所以我不會在這裏討論它們)。有人能指引我朝着正確的方向嗎?如果有幫助,使用Bash 4.3。
紅利問題。在我的調試中,我一直試圖使用echo $ {!HKD [@]}來查看密鑰名稱。儘管互聯網上到處都是這樣寫的,但它不起作用。儘管$ {HKD [@]}確實給了我值。有關於此的任何想法?
該最終回聲陳述的輸出樣本爲 ** declare HKD [GBP] ='echo $ {HKD [USD]}/$ {GBP [USD]} | bc' ** 對eval做的而不是echo不會增加變量。 – plutocrat