如何在bash中打印2个数组值

如何在bash中打印2个数组值,bash,Bash,我的bash脚本如下所示: vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad") vol1=("volume1" "volume2") for vol2 in "${vol1[@]}" do echo $vol2 for vol_nm in "${vol_id[@]}" do oci bv backup list -c ocid1.compartment.oc1--volume-id $vol_nm --limit 1 --sort-by TIM

我的bash脚本如下所示:

vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")
for vol2 in "${vol1[@]}"
do
echo $vol2
for vol_nm in "${vol_id[@]}"
do
oci bv backup list -c ocid1.compartment.oc1--volume-id  $vol_nm --limit 1 --sort-by TIMECREATED > a.txt
dt=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f2|cut -d '"' -f2`
h=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f3`
m=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f4|cut -d '.' -f1`
bkp_date="$dt:$h:$m"
echo $bkp_date
done
done
此脚本将查找vol_id数组中发送的每个卷id的最新备份日期。 我希望输出像:

Volume1 2018-07-09T05:45:45
Volume2 2018-07-09T05:11:16
但我得到了:

Volume1
2018-07-09T05:45:45
2018-07-09T05:11:16
Volume2
2018-07-09T05:45:45
2018-07-09T05:11:16

您可以尝试添加以下内容:

head -1

您可以尝试添加以下内容:

head -1

试着这样做:

#!/bin/bash

vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")

VolIndex=0
MaxIndices=${#vol_id[@]}

while (($VolIndex < $MaxIndices))
do
    echo "${vol_id[$VolIndex]} ${vol1[$VolIndex]}"
    ((++VolIndex))
    ...

done
#/bin/bash
vol_id=(“ocid1.volume.oc1”“ocid1.volume.oc1.iad”)
第1卷=(“第1卷”“第2卷”)
VolIndex=0
MaxIndexes=${vol#u id[@]}
而(($VolIndex<$maxindex))
做
echo“${vol_id[$VolIndex]}${vol1[$VolIndex]}”
(++VolIndex))
...
完成

尝试以下方法:

#!/bin/bash

vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")

VolIndex=0
MaxIndices=${#vol_id[@]}

while (($VolIndex < $MaxIndices))
do
    echo "${vol_id[$VolIndex]} ${vol1[$VolIndex]}"
    ((++VolIndex))
    ...

done
#/bin/bash
vol_id=(“ocid1.volume.oc1”“ocid1.volume.oc1.iad”)
第1卷=(“第1卷”“第2卷”)
VolIndex=0
MaxIndexes=${vol#u id[@]}
而(($VolIndex<$maxindex))
做
echo“${vol_id[$VolIndex]}${vol1[$VolIndex]}”
(++VolIndex))
...
完成

问题在于,您有一个内部循环,它会在第一个数组中回送一个元素,然后在第二个数组中回送所有元素。。。让我们看看这个:

vol_id=("a" "b")
vol1=("volume1" "volume2")
for vol2 in "${vol1[@]}"
do
echo $vol2
for vol_nm in "${vol_id[@]}"
do
echo $vol_nm
done
done
此代码的输出为:

volume1
a
b
volume2
a
b
为什么??因为您的第一个循环只执行并回显
$vol1
中的一个元素,然后循环
$volu id
中的所有元素,继续执行
$vol1
中的第二个元素,并再次循环
$volu id
中的所有元素

在这种情况下,您需要的是:

vol_id[0]-->vol1[0]
vol_id[1]-->vol1[1]
vol_id[2]-->vol1[2]
.
.    
.
vol_id[x]-->vol1[x]
怎么做?一种方法是使用计数器为两个阵列提供相同的位置:

#!bin/bash
vol_$id=("a" "b")
vol1=("volume1" "volume2")
max=${#vol_id[@]};
for i in `seq 0 $((max -1))`
do
echo "${vol1[$i]} ${vol_id[$i]}"
done
我认为您的代码的解决方案是:

#!/bin/bash
vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")
max=${#vol_id[@]};
for i in `seq 0 $((max -1))`
   do
   oci bv backup list -c ocid1.compartment.oc1--volume-id  ${vol_id[$i]} --limit 1 --sort-by TIMECREATED > a.txt
   dt=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f2|cut -d '"' -f2`
   h=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f3`
   m=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f4|cut -d '.' -f1`
   bkp_date="$dt:$h:$m"
   echo ${vol1[$i]} $bkp_date
done

希望它能帮助您

问题是您有一个内部循环,它会在第一个数组中回送一个元素,然后在第二个数组中回送所有元素。。。让我们看看这个:

vol_id=("a" "b")
vol1=("volume1" "volume2")
for vol2 in "${vol1[@]}"
do
echo $vol2
for vol_nm in "${vol_id[@]}"
do
echo $vol_nm
done
done
此代码的输出为:

volume1
a
b
volume2
a
b
为什么??因为您的第一个循环只执行并回显
$vol1
中的一个元素,然后循环
$volu id
中的所有元素,继续执行
$vol1
中的第二个元素,并再次循环
$volu id
中的所有元素

在这种情况下,您需要的是:

vol_id[0]-->vol1[0]
vol_id[1]-->vol1[1]
vol_id[2]-->vol1[2]
.
.    
.
vol_id[x]-->vol1[x]
怎么做?一种方法是使用计数器为两个阵列提供相同的位置:

#!bin/bash
vol_$id=("a" "b")
vol1=("volume1" "volume2")
max=${#vol_id[@]};
for i in `seq 0 $((max -1))`
do
echo "${vol1[$i]} ${vol_id[$i]}"
done
我认为您的代码的解决方案是:

#!/bin/bash
vol_id=("ocid1.volume.oc1" "ocid1.volume.oc1.iad")
vol1=("volume1" "volume2")
max=${#vol_id[@]};
for i in `seq 0 $((max -1))`
   do
   oci bv backup list -c ocid1.compartment.oc1--volume-id  ${vol_id[$i]} --limit 1 --sort-by TIMECREATED > a.txt
   dt=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f2|cut -d '"' -f2`
   h=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f3`
   m=`grep -i time-created a.txt | tr -s ' ' | cut -d ':' -f4|cut -d '.' -f1`
   bkp_date="$dt:$h:$m"
   echo ${vol1[$i]} $bkp_date
done

希望它能帮助您

您需要通过索引访问阵列,然后需要删除内部循环,并将volu nm设置为相应的索引名称。请参见:您需要通过索引访问阵列,然后需要删除内部循环,并将volu nm设置为相应的索引名称。请看:但我的代码给出了备份日期的重复结果,我认为您需要为此正确使用数组索引。移除内部循环并使用索引访问数组元素。我的第一个数组中有13-15个元素。但您的磁盘卷数与日期相同。因此,您需要进行计数,并将磁盘名与日期配对,然后一起打印。这需要1个循环,而不是2个。请看我的答案。你需要调整它,我现在要去吃午饭了。但是我的代码给出了备份日期的重复结果。阿卡什,我认为你需要正确地使用数组索引。移除内部循环并使用索引访问数组元素。我的第一个数组中有13-15个元素。但您的磁盘卷数与日期相同。因此,您需要进行计数,并将磁盘名与日期配对,然后一起打印。这需要1个循环,而不是2个。请看我的答案。你需要适应,我现在得去吃午饭了。