Arrays Bash数组-对移动位置的成员执行某些操作
我有以下带有数组变量的简化脚本:Arrays Bash数组-对移动位置的成员执行某些操作,arrays,bash,Arrays,Bash,我有以下带有数组变量的简化脚本: array1=(`somecommand1`) for i in ${array1[@]} ; do echo $1 done 这将给我以下输出: 1 277788 2 283871 3 282913 4 283519 5 283568 6 283563 7 283595 8 278229 9 283029 10 278654 11 280508 12 248825 13 282361 . 在每次运行脚本时,当${array1}更改时
array1=(`somecommand1`)
for i in ${array1[@]} ; do
echo $1
done
这将给我以下输出:
1 277788
2 283871
3 282913
4 283519
5 283568
6 283563
7 283595
8 278229
9 283029
10 278654
11 280508
12 248825
13 282361
.
在每次运行脚本时,当${array1}更改时,我需要运行
对那些移动到数组顶部的数字执行一些命令,加上我想检查一个可能保持不变的命令,发出checkcmd
,该命令将获得一个时间戳,并将其与上一次运行的时间戳进行比较
1 283563 <- moved=modified
2 283871 <- moved=modified (overtook 277788)
3 277788 <- modified? `checkcmd 277788` timestamp changed = modified, so check the #4
4 282913 `checkcmd 282913` -> timestamp unchanged -> do not check further
5 283519
6 283568
7 283595
8 278229
9 283029
10 278654
11 280508
12 248825
13 282361
我怎样才能做到这一点?我不想在每个${array1}成员上运行checkcmd
,因为由于来自服务器的轮询数据,每个checkcmd
都需要很长时间才能执行,而且${array1}中甚至可能有数百个成员,因此这会使此脚本无法使用。
我希望会有一些“函数”可以像这样相互比较数组,并且按照上面解释的逻辑,checkcmd
只能运行一次或两次
n=0; for i in "${array1[@]}"; do printf "%2d %s\n" $((++n)) "$i"; done
for idx in "${array1[@]}"; do
if (( ${array1[idx]} == ${array2[idx]} )); then
echo "they are the same: ${array1[idx]}"
else
echo "they are the same: ${array1[idx]} <=> ${array2[idx]}"
fi
done
“${array1[@]}”中idx的;做
if(${array1[idx]}==${array2[idx]}));然后
echo“它们是相同的:${array1[idx]}”
其他的
echo“它们是相同的:${array1[idx]}${array2[idx]}”
fi
完成
另一种使用索引打印的方法,使用c样式循环
for (( i=0; i<${#arr1[@]}; ++i )); do
echo $i ${arr1[i]}
done
for((i=0;i避免在一篇文章中提出多个问题。好的,我想我应该,会记得,谢谢你解决了我编辑的第一部分,因为它是第2篇的主题。我不确定如何实现这个想法,因为${array2}未在任何地方定义?是否有方法存储每次运行的数组并将其保留到下一次运行,以便我可以比较两者?您需要使用单独的变量。重新分配变量后,以前的值将丢失。
for (( i=0; i<${#arr1[@]}; ++i )); do
echo $i ${arr1[i]}
done