首页 > 解决方案 > Bash 脚本循环问题

问题描述

我尝试使用循环中的数组元素作为选择相关数组的动态键。我尝试了几种方法,但内部循环不起作用,我不能使用父参数作为选择正确数组的动态键。

有什么建议吗?谢谢

#!/bin/bash

SUFFIX='.zip'
ZIPCOMMAND=""
DSTDIR="/root/destfiles/"
SRCDIR="/root/srcfiles"
ZIPCOMMAND=""
PACKAGES=("STARTER" "BUSINESS")
STARTER=("209" "Module2")
BUSINESS=("210" "Module1" "Module3")

# packageid, destination command
function make_zip_file {
   targetfilename="${2}${1}$(echo -n "${1}" | md5sum | cut -d' ' -f1 ).zip ${3}"
    echo "$targetfilename"
}
cd $SRCDIR
declare -p BUSINESS
for j in "${PACKAGES[@]}"; do
    COUNT=0;
    declare -p j
    nums=${#j[@]}
    echo "$nums";
    if (( $nums > 1 )); then
        for i in "${j[@]}"; do
               if ((  $COUNT == 0 )); then
                               Packageid=$i;
                               echo -e "Package id $Packageid";
               else
                      echo -e "# $COUNT - $i$SUFFIX"
                      ZIPCOMMAND="${ZIPCOMMAND} ${i}${SUFFIX}";
                         fi
               COUNT=$(($COUNT+1));
        done
        echo -e "$ZIPCOMMAND"
        ZIPPARAMS=$(make_zip_file "$Packageid" "$DSTDIR" "$ZIPCOMMAND")
        zip -qr $ZIPPARAMS
        echo -e "$ZIPPARAMS"
    fi
done

标签: arraysbashssh

解决方案


如果我理解您的问题,您正在寻找一种方法来取消引用数组STARTERBUSINESS使用变量j.

也许有更好的方法,但我所做的是:

jref="${j}[@]"
jarray=("${!jref}")

例子:

$ BUSINESS=("210" "Module1" "Module3")
$ j=BUSINESS
$ jref="${j}[@]"
$ jarray=("${!jref}")
$ printf "%s\n" "${jarray[@]}"
210
Module1
Module3
$ echo ${jarray[1]}
Module1

推荐阅读