現代のプログラミングおよびスクリプト言語での私の経験から、ほとんどのプログラマーは一般に、配列の最初の要素をで参照することに慣れていると思います。 インデックスとして。
1を使用することに実質的な利点はありますか ?
Zsh以外の言語が配列と同じように動作することを聞いたことがあると思います。同様に便利なので、私には問題ありません。
ただし、以前にリリースされ、広く使用されているkshやbashなどのシェルスクリプト言語はすべて0を使用しているため、理由 誰かがこの一般的な「標準」を変更することを選択しますか?
私の質問に対する私の直接の答えは「もちろんそうではありません」です。
それで、シェルに対するこのやや「排他的な機能」に関して私が考えることができる唯一の説明は、「彼らはこれを見せびらかすためにこれをしただけです。もう少しクールなシェル 「。
ただし、Zshもその歴史についてもよくわかりません。また、これに関する私の些細な理論が意味をなさない可能性が高いです。
これについての説明はありますか?それとも個人的な趣味からですか?
承認された回答:
- 事実上すべてのシェル配列(Bourne、csh、tcsh、fish、rc、es、yash)は1から始まります。私が知っている唯一の例外はkshです(bashはkshをコピーしたばかりです)。
- 当時(90年代初頭)に最も解釈された言語:
awk
、tcl
少なくとも、シェルから通常使用されるツール(cut -f1-3
、head -n 3
、sort -k1,3
、cal 1 2015
、comm -1
)1から開始します。sed
、ed
、vi
1から行に番号を付けます… - zshは、Bourneシェルとcshを最大限に活用します。 Bourneシェル配列
[email protected]
1から開始します。zshは[email protected]
の処理と一貫性があります (Bourneのように)または$argv
(cshのように)。ksh
でそれがどれほど混乱しているかを見てください ここで、${@:0:1}
たとえば、最初の位置パラメータは提供されません。 - シェルは、プログラミング言語になる前のユーザーツールです。ほとんどのユーザーが最初を持つことは理にかなっています
$a[1]
の要素 。また、要素の数が最後のインデックスと同じであることも意味します(kshを除く他のほとんどのシェルと同様にzshでは、配列はではありません。 まばらです。 -
a[1]
最初の要素はa[-1]
と一致しています 最後に。
したがって、IMOの質問は、むしろ次のようになります。配列を0から開始するために、David Kornの頭に何が入ったのですか?