shell 打印序号为1-4 6-10 12-15 [已关闭]

rn0zuynd  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(113)

已关闭。此问题需要更多focused。它目前不接受回答。
**希望改进此问题?**更新问题,使其仅针对editing this post的一个问题。

8天前关闭。
Improve this question
我有一个shell脚本数组为4 5 6 7 9 10 14 15 16 18 19 20 22 23 24 25 27 28 29 30
我想对它进行排序,并将其传递给变量输出为4-7 9-10 14-16 18-20 22-24 25 27-30
不知道如何格式化它尝试循环,但没有工作

col17t5w

col17t5w1#

您可以尝试:

input_arr=(4 5 6 7 9 10 12 14 15 16 18 19 20 22 23 24 25 27 28 29 30)
output_arr=()
temp_arr=()
temp_arr+=(${input_arr[0]})
for ((i=0; i < ${#input_arr[@]}; i++)); do
    temp=$(expr ${input_arr[i]} + 1)
    [ "${input_arr[i+1]}" = "$temp" ] && temp_arr+=(${input_arr[i+1]})
    [ "${input_arr[i+1]}" != "$temp" ] && [ "${#temp_arr[@]}" -gt 1 ] && output_arr+=("${temp_arr[0]}-${temp_arr[-1]}") && temp_arr=() && temp_arr+=(${input_arr[i+1]})
done
echo "${output_arr[@]}"

字符串
输出量:

4-7 9-10 12 14-16 18-20 22-25 27-30


说明:

  • 循环遍历input_arr,并保留一个temp_arr(用input_arr的第一个元素初始化)作为连续值。
  • 一旦序列被破坏,将当前temp_arr的开始和结束值保存到output_arr作为start-end,并重置temp_arr以从破坏序列的元素(下一个input_arr数组元素)开始

相关问题