POSIX에 배열을 포함하면 POSIX 표준이 깨질 수 있습니까?

Aug 16 2020

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 표준에 포함되지 않은 이유 중 적어도 일부가 그렇게하면 일을 망칠 수 있다는 것을 읽은 것을 기억합니다. 이것이 사실입니까? 무슨 일이 깨질까요?

답변

2 bk2204 Aug 18 2020 at 08:39

난 당신이 언급하는지 텍스트 모르겠지만,이 경우가 아니라 확신, 이후 bashksh93POSIX를 준수 있어야하고, 배열 한 경우 POSIX 쉘이 깨질 경우, 그 다른 쉘을 준수하지 않을 .

그러나 이것이 POSIX가 그것들을 포함 할 가능성이 있다는 것을 의미하지는 않습니다. 첫째, bashksh93배열 같은 방법을 구현하지 않을 수 있으며, POSIX는 널리 배포 된 역사적 구현 다르게 행동 기능을 지정하지 것이다.

둘째, POSIX는 일반적으로 많은 기능을 지정하지 않습니다. 이제는 요구할 제안이 있습니다 local. 이는 거의 모든 오픈 소스 POSIX 쉘에 널리 배포됩니다 ksh93. 마찬가지로 viPOSIX 기능 만 구현 한 구현 을 사용할 수 있지만 대부분의 사용자는 기능이 부족하다고 생각합니다.

마지막으로 POSIX는 대부분의 구현에서 이미 사용 가능한 것을 표준화하는 것을 선호하며 쉘 배열은 그런 것이 아닙니다. dash계보를 공유하는 대부분의 셸과 busybox. 완전한 POSIX 환경은 상대적으로 작을 수 있으며 임베디드 시스템으로 작업해야하는 사람들에게 매우 편리하므로 단순성을 위해 소유하기 좋은 환경은 종종 생략됩니다.

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