示例
我想知道每种安排的大小。 我有一个多维的安排。
array=("SRV_1=(e1 e2 e3 e4)" "SRV_2=(e1 e2)")
for elt in "${array[@]}";do eval $elt;done
CANT_SRVS="${#array[@]}
for ((i=1;i<=$CANT_SRVS;i++));do
CANT_E="${#SRV_$i[@]}" <------ ERROR
echo $CANT_E <------- length array
done
答案 0 :(得分:4)
nameref可以指向多个变量;因此,srvVar
会引用您下面的多个数组中的任何一个:
srv_1=(e1 e2 e3 e4) # I don't condone the original "eval" pattern, and no part of
srv_2=(e1 e2) # the question hinged on it; thus, not reproducing it here.
declare -n curSrv
for curSrv in "${!srv_@}"; do # iterates over variable names starting with "srv_"
echo "${#curSrv[@]}" # ...taking the length of each.
done
答案 1 :(得分:0)
查尔斯有很好的建议。
代码上的切线:当变量分配保存在变量中时,可以使用eval
代替declare
。
value="SRV_1=(e1 e2 e3 e4)"
declare -a "$value"
varname=${value%%=*}
declare -p "$varname"
declare -a SRV_1='([0]="e1" [1]="e2" [2]="e3" [3]="e4")'
而且,如查尔斯所演示的那样,使用数组declare -n a=$varname