bash 스크립트의 IF 문에 2개의 숫자를 추가하는 방법은 무엇입니까?

bash 스크립트의 IF 문에 2개의 숫자를 추가하는 방법은 무엇입니까?

그래서 방금 현재 시간으로부터 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명령 의 경우 %_H0 대신 공백을 채울 항목, %-H시간을 채우지 않을 항목 또는 which를 사용합니다.
  • bash 산술에 "10#" 접두어( $이 경우 필수) 가 있는 기본 10 숫자임을 알려줍니다.
    $ if (( 10#${currentFileHour[i]} + 3 <= 19 )); then echo yes; fi
    yes
    

관련 정보