그래서 방금 현재 시간으로부터 3시간 이하인 폴더를 삭제하기 위해 검사를 실행해 보았지만 "예상 정수 표현식" 오류가 발생했습니다.
if [ ${currentFileHour[$i]}+3 -le 19 ]
간단한 예로 자바스크립트로 작성하면 다음과 같습니다.
if(5 + 6 <= 10){
console.log('yes')
}
답변1
bash에는 산술 조건부 구조가 있습니다(참조:조건부 구조설명서에 있음)
if (( "${currentFileHour[$i]}" + 3 <= 19 )); then ...
Bash의 연산 맥락에서 를 생략할 수 있습니다. $
배열 요소의 경우 다음과 같습니다.
if (( currentFileHour[$i] + 3 <= 19 )); then ...
이것이 인덱스 배열이라고 가정하면 인덱스는 산술적이므로
if (( currentFileHour[i] + 3 <= 19 )); then ...
데모:
$ i=10
$ currentFileHour[i]=16
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
yes
시간(및 분, 초 등)에 대해 주의할 점은 유효하지 않은 8진수입니다.
$ currentFileHour[i]="08"
$ if (( currentFileHour[i] + 3 <= 19 )); then echo yes; fi
bash: ((: 08: value too great for base (error token is "08")
앞에 0이 있으면 bash는 사용자가 8진수를 원한다고 생각하게 됩니다.
이 문제를 해결하려면:
- 이
date
명령 의 경우%_H
0 대신 공백을 채울 항목,%-H
시간을 채우지 않을 항목 또는 which를 사용합니다. - bash 산술에 "10#" 접두어(
$
이 경우 필수) 가 있는 기본 10 숫자임을 알려줍니다.$ if (( 10#${currentFileHour[i]} + 3 <= 19 )); then echo yes; fi yes