【发布时间】:2018-04-24 03:46:56
【问题描述】:
我有下面的 shell 脚本,其中有两个数组 number1 和 number2。我有一个变量range,其中包含数字列表。
现在我需要弄清楚number1 数组中的所有数字也存在于range 变量中。 number2 数组也是如此。下面是我的 shell 脚本,它工作正常。
number1=(1220 1374 415 1097 1219 557 401 1230 1363 1116 1109 1244 571 1347 1404)
number2=(411 1101 273 1217 547 1370 286 1224 1362 1091 567 561 1348 1247 1106 304 435 317)
range=90,197,521,540,552,554,562,569:570,573,576,579,583,594,597,601,608:609,611,628,637:638,640:641,644:648
range_f=" "$(eval echo $(echo $range | perl -pe 's/(\d+):(\d+)/{$1..$2}/g;s/,/ /g;'))" "
echo "$range_f"
for item in "${number1[@]}"; do
if [[ $range_f =~ " $item " ]] ; then
new_number1+=($item)
fi
done
echo "new list: ${new_number1[@]}"
for item in "${number2[@]}"; do
if [[ $range_f =~ " $item " ]] ; then
new_number2+=($item)
fi
done
echo "new list: ${new_number2[@]}"
有没有更好的方法来写上面的东西?到目前为止,我有两个 for 循环迭代,然后找出 new_number1 和 new_number2 数组。
注意:
644:648 之类的数字表示,它以 644 开头,以 648 结尾。它只是缩写形式。
【问题讨论】:
-
我投票结束这个问题,因为它属于代码审查。好问题!