内容を持つ配列があります:、、、、、、${array[0]}="h4"
そしてこの配列の数字(4、2、7、1、3)が互いに成功することを${array[1]}="q2"
確認したいと思います。これを行う最良の方法は何ですか?${array[2]}="s7"
${array[3]}="r1"
${array[4]}="h3"
答え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
数字には、2 文字目から始まる複数桁の数字がn
許可されます。sort
編集する:またはより短く、
( IFS=$'\n'; [ "${ARR[*]}" == "$(sort -k1.2n <<< "${ARR[*]}" )" ] ) && echo in seq || echo out of seq
答え2
以下のコードは、「最後の」変数を初期化してから配列を繰り返し(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に最初の/先頭の文字を削除して各要素を1行に印刷するように依頼してから、パイプに接続して入力が揃っているかどうかを尋ねsort
ます。
if printf '%d\n' "${array[@]/#?/}" | sort -cn 2>/dev/null
then
echo is sorted
else
echo is not sorted
fi