POSIX에 배열을 포함하면 POSIX 표준을 위반합니까?

POSIX에 배열을 포함하면 POSIX 표준을 위반합니까?

bash 및 ksh93에서 배열을 사용하는 기능은 여러 배열의 요소에 빠르게 액세스해야 할 때 매우 편리합니다. 간단한 예는 다음과 같습니다.

#!/bin/ksh93 --

array1=(1 2 3 4 5 6 7)

array2=(8 9 10 11 12 13 14)

printf '%s\n' "Third element of array1 is ${array1[2]} and fifth element of array2 is ${array2[4]}"

POSIX 표준에 배열이 포함되지 않은 이유 중 적어도 일부는 그렇게 하면 뭔가가 망가질 수 있기 때문이라는 글을 읽은 기억이 납니다. 이게 진짜야? 무엇이 깨질까요?

답변1

나는 당신이 어떤 텍스트를 언급하고 있는지 모르지만 POSIX와 호환되어야 하고 배열이 POSIX 쉘 손상을 일으키는 경우 해당 쉘은 호환되지 않기 때문에 그렇지 않다고 확신 bash합니다 ksh93.

그러나 이것이 POSIX에 해당 항목이 포함될 수 있다는 의미는 아닙니다. 첫째, 배열은 동일한 방식으로 구현되지 않을 bash수 있으며 POSIX는 널리 배포된 역사적 구현에서 다르게 동작하는 기능을 지정하기를 원하지 않습니다.ksh93

둘째, POSIX는 일반적으로 많은 기능을 지정하지 않습니다. 이제 local를 제외한 거의 모든 오픈 소스 POSIX 셸에 널리 배포되는 require에 대한 제안이 나왔습니다 ksh93. POSIX 기능만 구현하는 구현도 가능 vi하지만 대부분의 사용자는 기능이 매우 희박하다는 것을 알게 될 것입니다.

결국 POSIX는 대부분의 구현에서 이미 사용 가능한 것을 표준화하는 것을 선호하며 쉘 배열은 그런 것이 아닙니다. dash그것들이 없으면 완전한 POSIX 환경과 같은 조상을 공유하는 대부분의 쉘은 busybox상대적으로 작을 수 있으며 이는 임베디드 시스템으로 작업해야 하는 사람들에게 매우 편리하므로 일반적으로 단순성을 위해 일부 유용한 내용이 생략됩니다.

또한 널리 배포된 오픈 소스 구현에 기능이 있다고 해서 상용 Unix 환경에도 해당 기능이 있다는 의미는 아닙니다. POSIX가 새 버전에서 배열을 지정하더라도 이러한 모든 시스템이 이를 지원하도록 업데이트하는 데 수년이 걸릴 것입니다.

관련 정보