我有一个包含内容的数组:${array[0]}="h4"
, ${array[1]}="q2"
, ${array[2]}="s7"
, , ${array[3]}="r1"
,${array[4]}="h3"
我想确定这些数组中的数字 (4, 2, 7, 1, 3) 是否彼此成功。做这个的最好方式是什么。
答案1
您可以部署最近问题的答案,例如
$ ARR=(h4 q2 s7 r1 h3)
$ SA=( $(IFS=$'\n'; echo "${ARR[*]}" | sort -k1.2n) )
$ [ "${ARR[*]}" == "${SA[*]}" ] && echo in seq || echo out of seq
out of seq
数字n
允许sort
从第二个字符开始使用多位数字。
编辑:或者,甚至更短,
( IFS=$'\n'; [ "${ARR[*]}" == "$(sort -k1.2n <<< "${ARR[*]}" )" ] ) && echo in seq || echo out of seq
答案2
下面的代码初始化“最后一个”变量,然后循环遍历数组(从第二个元素开始)并检查该元素是否小于前一个元素;如果是,代码会回显失败消息并停止循环。
lastone=${array[0]:1}
for((i=1; i < ${#array[@]}; i++))
do
if (( "${array[i]:1}" < "$lastone" ))
then
echo failure
break
fi
lastone=${array[i]:1}
done
或者,要求 bash 在其自己的行上打印每个元素,同时删除第一个/前导字符,然后通过管道将其传递到sort
并询问输入是否已排序:
if printf '%d\n' "${array[@]/#?/}" | sort -cn 2>/dev/null
then
echo is sorted
else
echo is not sorted
fi