.so 를 사용하는 스크립트를 작성 중이므로 read -i
Bash 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
.