循环中具有不同长度的两个数组

时间:2015-10-30 14:55:02

标签: arrays bash loops for-loop

我有两个长度不同的数组,我需要在同一个循环中使用它们。

这是代码

#!/bin/bash
data=`date +%Y-%m-%d`
data1=`date -d "1 day" +%Y-%m-%d`
cd /home/test/em_real/

#first array (today and tomorrow) 
days="$data $data1"
#second array (00 till 23)
hours="00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23"

for value in $hours
do

cp /home/test/em_real/mps_"${days[i++]}"_"$value":00:00 /home/DOMAINS/test_case/
sleep 10
done

Tt失败,没有时间。

我该怎么做?

@fedorqui如果现在,在bucle里面,我想删除破折号( - )并再做一个订单,我不知道为什么它没有得到字符串,代码是以下:

days=("$data" "$data1")   #create an array properly

for value in {00..23}; do
for day in "${days[@]}"; do
cp "/path/mps_${day}_${value}:00:00" /another/path/test_case/
d=d01
hourSIMULATION=01
clean= echo ${day} | sed -e 's/-//g'
sed -e 's/<domine>/'$d'/g' -e 's/<data-initial>/'$clean$value'/g' -e 's/<hour-SIMULATION>/'$hourSIMULATION'/g' run_prhours > run_pr
done
done

当我在$dayclean内查看时,字符串run_pr为空,你知道原因是什么吗?

1 个答案:

答案 0 :(得分:3)

您正在使用days[i++],但未在任何地方定义i。不确定您要对${days[i++]}做什么,但$days只是一个包含"$data $data1"的字符串。

您可能想说days=($data $data1)来创建数组。

此外,您可以说for hour in {00.23}而不是明确数字。

然后,你想要循环过去几个小时,然后再过几天。为此,请使用嵌套循环:

days=("$data" "$data1")   #create an array properly

for value in {00..23}; do
   for day in "${days[@]}"; do
      cp "/path/mps_${day}_${value}:00:00" /another/path/test_case/
   done
done