2015-04-21 44 views
2

以下是我的例子。我正在嘗試創建一個腳本來做git clone + git pull。現在下面我想迭代第二個數組(A_modules)來檢查是否有任何repos文件夾存在或不存在,如果不創建它,然後cd到它,並做混帳拉。問題是我如何使用第一個數組中的一個作爲變量的第二個數組名稱來循環。在第二個循環中,$ {DIR [@]};不起作用!需要了解如何將$ {DIR [@]}擴展爲$ {A_modules [@]}。 我可以很容易地做到這一點與第3陣列中的3個循環的3個值。但任何更聰明的方式來實現這種方式,我想..非常感謝。如何遍歷循環中的多個數組

#!/bin/bash 
BASE_FOLDER=/opt/xyz 
declare -a DIR_TOP=(A_modules customers C_modules) 
declare -a A_modules=(python_repo java_repo perl_repo) 
declare -a customers=(repo1 repo2 repo3) 
declare -a C_modules=(xy_repo1 yz_repo2) 

#GIT clone. 
cd ${BASE_FOLDER} 
for DIR in ${DIR_TOP[@]}; do 
if [ ! -d "${DIR_TOP[$DIR]}" ]; then 
    mkdir -p ${BASE_FOLDER}/${DIR} 
fi 

for REPO in ${DIR[@]}; do 
    cd ${BASE_FOLDER}/${DIR_TOP[$DIR]}/ 
    if [ ! -d "${REPO]}" ]; then 
      mkdir ${REPO} 
      echo "Git cloning ${DIR_TOP[$DIR]} group repositorys: ${REPO} ..." 
      git clone --branch 8.0 https://${GIT_USER}@${GIT_SERVER}/r/${DIR_TOP[$DIR]}/${REPO}.git 
     fi 
    done 
done 
+0

http://mywiki.wooledge.org/BashFAQ/006 –

回答

1

你應該使用tempVar和未來與!評估,審覈:bash-indirect-expansion-please-explain

#!/bin/bash 
declare -a DIR_TOP=(A_modules customers C_modules) 
declare -a A_modules=(python_repo java_repo perl_repo) 
declare -a customers=(repo1 repo2 repo3) 
declare -a C_modules=(xy_repo1 yz_repo2) 

for DIR in ${DIR_TOP[@]}; do 
    echo "1: $DIR"; 
    tempVar="$DIR[@]"; 
    for REPO in ${!tempVar}; do 
    echo "2: $REPO"; 
    done 
done 
+0

感謝。我很感激你。 – Johnbritto