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が新しいバージョンで配列を指定しても、これらのすべてのシステムがそれをサポートするように更新するには数年かかります。