Z mých zkušeností s moderními programovacími a skriptovacími jazyky se domnívám, že většina programátorů je obecně zvyklá odkazovat na první prvek pole pomocí jako index.
Existují nějaké podstatné výhody při použití 1 ?
Jsem si jistý, že jsem slyšel o více jazycích jiných než Zsh, které se chovaly podobně s poli; podle mě je to v pořádku, protože je to stejně pohodlné.
Nicméně, protože dříve vydané a široce používané skriptovací jazyky shellu, jako je ksh a bash, všechny používají 0, proč rozhodl by se někdo změnit tento společný „standard“?
Moje okamžitá odpověď na mou otázku by byla „samozřejmě ne“;
pak jediné vysvětlení, které mě ohledně této poněkud „exkluzivní funkce“ pro shelly napadá, by bylo „to udělali jen proto, aby předvedli trochu víc jejich cool shell “.
O Zsh ani o jeho historii toho moc nevím a je velká šance, že moje triviální teorie o tom nedává žádný smysl.
Existuje pro to vysvětlení? Nebo je to jen z osobního vkusu?
Přijatá odpověď:
- Prakticky všechna pole shellu (Bourne, csh, tcsh, fish, rc, es, yash) začínají na 1. ksh je jediná výjimka, kterou znám (bash právě zkopíroval ksh).
- Většina interpretovaných jazyků v té době (počátek 90. let):
awk
,tcl
přinejmenším a nástroje obvykle používané ze shellu (cut -f1-3
,head -n 3
,sort -k1,3
,cal 1 2015
,comm -1
) začněte v 1.sed
,ed
,vi
číslujte jejich řádky od 1… - zsh využívá to nejlepší z Bourne shellu a csh. Bourne shell pole
[email protected]
začátek na 1. zsh je konzistentní s jeho zpracováním[email protected]
(jako v Bourneovi) nebo$argv
(jako v csh). Podívejte se, jak je to vksh
matoucí kde${@:0:1}
nedává vám například první poziční parametr. - Shell je uživatelský nástroj, než programovací jazyk. Pro většinu uživatelů dává smysl mít první prvek v
$a[1]
. Znamená to také, že počet prvků je stejný jako u posledního indexu (v zsh stejně jako ve většině ostatních shellů kromě ksh pole nejsou řídké). a[1]
pro první prvek je konzistentní sa[-1]
naposled.
Otázka IMO by tedy měla spíše znít:co se dostalo do hlavy Davida Korna, že jeho pole začínala na 0?