我试图将循环中的数组元素用作选择相关数组的动态键。我尝试了几种方法,但是内部循环不起作用,并且我不能将父参数用作选择正确数组的动态键。
有什么建议吗? 谢谢
#!/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
答案 0 :(得分:2)
如果我理解您的问题,那么您正在寻找一种使用变量STARTER
解引用数组BUSINESS
和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