GNU/Linux >> Znalost Linux >  >> Linux

Důvod, proč je první prvek pole Zsh indexován 1 namísto 0?

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 v ksh 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í s a[-1] naposled.
Související:Vytvořit samostatné 7z archivy pro každý adresář v aktuálním adresáři a navíc paralelizovat pomocí GNU Parallel?

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?


Linux
  1. Začínáme se Zsh

  2. Proč server zablokoval moji IP?

  3. Linux – Proč se ethernetové rozhraní nazývá Enp0s10 namísto Eth0?

  1. Proč „sudo Su“ ve skriptu Shell nespustí zbytek skriptu jako kořen?

  2. Pokud procesy zdědí prostředí rodiče, proč potřebujeme export?

  3. Proč nikdo nepoužívá The True Bourne Shell jako /bin/sh?

  1. Proč potřebujete umístit #!/bin/bash na začátek souboru skriptu?

  2. Chování polí ve skriptování bash a shellu zsh (počáteční index 0 nebo 1?)

  3. Proč uživatel 'bin' potřebuje přihlašovací shell?