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 표준에 포함되지 않은 이유 중 적어도 일부가 그렇게하면 일을 망칠 수 있다는 것을 읽은 것을 기억합니다. 이것이 사실입니까? 무슨 일이 깨질까요?
답변
난 당신이 언급하는지 텍스트 모르겠지만,이 경우가 아니라 확신, 이후 bash
및 ksh93
POSIX를 준수 있어야하고, 배열 한 경우 POSIX 쉘이 깨질 경우, 그 다른 쉘을 준수하지 않을 .
그러나 이것이 POSIX가 그것들을 포함 할 가능성이 있다는 것을 의미하지는 않습니다. 첫째, bash
및 ksh93
배열 같은 방법을 구현하지 않을 수 있으며, POSIX는 널리 배포 된 역사적 구현 다르게 행동 기능을 지정하지 것이다.
둘째, POSIX는 일반적으로 많은 기능을 지정하지 않습니다. 이제는 요구할 제안이 있습니다 local
. 이는 거의 모든 오픈 소스 POSIX 쉘에 널리 배포됩니다 ksh93
. 마찬가지로 vi
POSIX 기능 만 구현 한 구현 을 사용할 수 있지만 대부분의 사용자는 기능이 부족하다고 생각합니다.
마지막으로 POSIX는 대부분의 구현에서 이미 사용 가능한 것을 표준화하는 것을 선호하며 쉘 배열은 그런 것이 아닙니다. dash
계보를 공유하는 대부분의 셸과 busybox
. 완전한 POSIX 환경은 상대적으로 작을 수 있으며 임베디드 시스템으로 작업해야하는 사람들에게 매우 편리하므로 단순성을 위해 소유하기 좋은 환경은 종종 생략됩니다.
또한 널리 배포 된 오픈 소스 구현에 기능이 있다고해서 상용 Unix 환경이 사용된다는 의미는 아닙니다. POSIX가 새 버전에서 어레이를 지정한다고하더라도 모든 시스템이이를 지원하도록 업데이트되기까지는 몇 년이 걸릴 것입니다.