Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在循环中迭代多个数组_Bash - Fatal编程技术网

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

Bash 如何在循环中迭代多个数组,bash,Bash,下面是我的例子。我正在尝试创建一个脚本,它将执行git clone+git pull。下面我尝试迭代第二个数组(A_模块),检查repos文件夹是否存在,如果不存在,创建它,然后cd到它并执行git pull。问题是如何在变量to循环中使用第一个数组值中的一个作为第二个数组名。在第二个for循环中,${DIR[@]};不行!。需要知道如何将${DIR[@]}扩展到${A_模块[@]}。 我可以很容易地做到这一点,在第一个数组中,3个值对应3个for循环。但是,用我正在努力的方式来实现这一目标的任

下面是我的例子。我正在尝试创建一个脚本,它将执行git clone+git pull。下面我尝试迭代第二个数组(A_模块),检查repos文件夹是否存在,如果不存在,创建它,然后cd到它并执行git pull。问题是如何在变量to循环中使用第一个数组值中的一个作为第二个数组名。在第二个for循环中,${DIR[@]};不行!。需要知道如何将${DIR[@]}扩展到${A_模块[@]}。 我可以很容易地做到这一点,在第一个数组中,3个值对应3个for循环。但是,用我正在努力的方式来实现这一目标的任何更聪明的方法。。非常感谢

#!/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

您应该使用
tempVar
,然后使用
进行计算,审查:


谢谢谢谢你,何塞。
#!/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