如何在循环中迭代多个数组

时间:2015-04-21 16:44:26

标签: bash

以下是我的例子。我正在尝试创建一个将执行git clone + git pull的脚本。现在下面我试图迭代第二个数组(A_modules)来检查是否存在任何repos文件夹,如果没有创建它然后cd到它并执行git pull。问题是如何在变量循环中使用第一个数组值之一作为第二个数组名称。在第二个for循环中,$ {DIR [@]};不起作用!需要知道如何将$ {DIR [@]}扩展为$ {A_modules [@]}。 我可以使用3 for循环轻松完成第一个数组中的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

1 个答案:

答案 0 :(得分: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