Bash >=4.0을 감지하는 방법은 무엇입니까?

Bash >=4.0을 감지하는 방법은 무엇입니까?

.so 를 사용하는 스크립트를 작성 중이므로 read -iBash 4.0 이상이 필요합니다.

불행하게도 2020년 초에도 macOS는 여전히 Bash 3.x와 함께 제공되며 내 스크립트의 많은 사용자는 Mac을 사용할 것입니다. Apple은 기본 셸을 zsh로 변경했기 때문에 번들 버전을 업데이트할 것으로 예상하지 않습니다.

따라서 내 스크립트가 Bash가 충분히 새로운지 감지하고 사용자에게 업그레이드를 지시하는 유용한 오류 메시지와 함께 종료되기를 원합니다.

비교할 수 있다는 것을 알고 있지만 ${BASH_VERSION}이는 숫자가 아니고 잠재적으로 신뢰할 수 없는 형식의 문자열입니다. 이에 대해 가정을 하는 것은 취약하다고 느껴집니다.

이를 달성하는 가장 좋은 방법은 무엇입니까?

requireBash4() {
  if <something here>; then
    >&2 echo "Bash 4.0 or newer is required."
    >&2 echo "Once you're upgraded, re-run this script."
    exit 1
  fi
}

답변1

if ((BASH_VERSINFO >= 4)); then ...

이것은 BASH_VERSINFO배열이라는 점에 유의하세요. Bash의 다른 배열과 마찬가지로 이를 일반 변수로 사용하면 0번째 요소를 참조합니다. ((BASH_VERSINFO[0] >= 4))더 명확하다고 느끼면 사용할 수도 있습니다.

예, 이 변수와 구문은 bash 2.0 이상부터 지원되었습니다.

BASH_VERSINFO

이 bash 인스턴스에 대한 버전 정보를 보유하는 멤버가 있는 읽기 전용 배열 변수입니다. 배열 멤버에 할당되는 값은 다음과 같습니다.

BASH_VERSINFO[0] 주 버전 번호(릴리스 버전)입니다.
BASH_VERSINFO[1] 부 버전 번호(버전)입니다.
BASH_VERSINFO[2] 패치 수준.
BASH_VERSINFO[3] 빌드 버전.
BASH_VERSINFO[4] 출시 상태(예: 베타1)
BASH_VERSINFO[5] 의 가치 MACHTYPE.

관련 정보