2017-02-17 77 views
0

我需要閱讀的shell腳本變量和使用變量來執行某些操作。對於例如我從配置讀取變量的市場和使用這個變量來找出使用另一個變量redis_host_silver_$j閱讀UNIX Shell腳本變量和執行操作

命令的值: -

for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`; 
do 
    echo $(redis_host_silver_$j); 
done 

誰能幫我在這?

+0

即時得到錯誤: - 對於'echo $ markets |中的j + AWK -F 「」 '\' '{對於(I = 1; I <= NF; ++ⅰ)打印$ I}' \ '''」 ++ redis_host_silver_uk test.sh:線61:redis_host_silver_uk:找不到命令 –

+0

嘗試引用在你的回聲,像'回聲「redis_host_silver_ $ J」;' – Jack

+0

此外,如果你有權限這樣做,這將有助於編輯原始問題補充錯誤信息 – Jack

回答

1

的錯誤是在echo $(redis_host_silver_$j);一部分。

$()語法在bash擴展裏面有什麼作爲命令所以你實際上是試圖執行redis_host_silver_$j

嘗試:

for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`; 
do 
    echo "redis_host_silver_$j"; 
done 

如果redis_host_silver_...是一個變量的名字,你想要的值然後做到這一點:

for j in `echo $markets | awk -F"," '{ for(i=1; i<=NF; ++i) print $i }'`; 
do 
    VAR=redis_host_silver_$j; echo ${!VAR}; 
done 

注意花括號

+0

非常感謝傑克!這個黑客工作.. –

+0

很高興提供幫助。你使用了哪種方法? – Jack

+0

間接擴展似乎比'eval'好得多...(這是我將如何接近它...) –

0

我個人會使用一個for循環來直接讀這可能會或可能不會有空格在其過程中替換的數據引導了。 雖然間接調用可能會起作用,但我會說你的變量類型是錯誤的,而第二個變量redis_host_silver應該實際上是一個包含文件中項目作爲索引的數組。

因此,也許是這樣的:

IFS="," read -ra items <<<"$markets" 

for item in "${items[@]}" 
do 
    echo "${redis_host_silver[$item]}" 
done 

如果值從「市場」數字,然後在「項目」中調用數組變量不需要像下面的「$」