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

私は、あなたが参照しているものをテキスト知りませんが、私はこれはそうではありませんかなり確信している、以来、bashおよびksh93POSIXに準拠することになっている、と配列がなかった場合、POSIXシェルが破損する原因、そしてこれらのシェルは従わないだろう。

ただし、それはPOSIXにそれらが含まれる可能性が高いという意味ではありません。まず、bashおよびksh93配列を同じように実装していないこと、およびPOSIXは広く展開されている歴史的な実装では異なる挙動機能を指定したいとは思わないでしょう。

第二に、POSIXは一般的に多くの機能を指定していません。localを除くほぼすべてのオープンソースPOSIXシェルに広く展開されている、を要求する提案さえありksh93ます。同様に、viPOSIX機能のみを実装した実装を使用することも可能ですが、ほとんどのユーザーは、機能が非常に少ないことに気付くでしょう。

最後に、POSIXは、ほとんどの実装ですでに利用可能なものを標準化することを好みますが、シェル配列はそのようなものではありません。dash系統を共有するほとんどのシェルや、などの小さな実装と同様に、それらが欠けていbusyboxます。完全なPOSIX環境は比較的小さい場合があり、組み込みシステムで作業する必要がある人にとっては非常に便利です。そのため、シンプルさを優先して、便利なものは省略されることがよくあります。

また、広く展開されているオープンソースの実装に機能があるからといって、商用のUnix環境に機能があるとは限らないことにも注意してください。POSIXが新しいバージョンでアレイを指定したとしても、それらのシステムがすべてそれらをサポートするように更新されるまでには何年もかかるでしょう。