arrays - 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
解决方案
如果我理解您的问题,您正在寻找一种方法来取消引用数组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
推荐阅读
- c# - 在 UWP 中对多行文本框使用 SHIFT + ENTER
- xamarin - AVCaptureMetadataOutputObjectsDelegate、DidOutputMetadataObjects 并不总是被调用
- javascript - 浏览器关闭时,反应网络应用程序中的计时器在移动设备中不起作用
- coldfusion - 在 Lucee 中产生 perlin 噪声的最简单方法是什么?
- struct - structAppend 与重复
- c# - 如何在 DotRas C# 中删除 VPN 连接 (.pbk)?
- java - junit 测试中的 JPA 存储库为空
- java - 存储由 Handler 运行的递归 Runnable 的运行计数的最佳方法?
- ios - SVG 使用和 IE/Safari iOS
- powerbi - Excel 公式到 Power Bi