내용이 있는 배열이 있습니다: ${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