2015-04-21 45 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