Co to znamená $ {@: 2} ve skriptu prostředí

Vidím to ve skriptu prostředí.

variable=${@:2} 

Co to dělá?

Komentáře

  • Přesně tak to vypadalo ve skriptu? Syntaxe vypadá jako pole, ale chybí některé části. Můžete prosím poslat pár řádků kolem tohoto řádku ze skriptu?
  • To je proměnná začínající od druhého písmene. var="my_value"; echo var="${var[@]:2}"; echo "$var" Vidíte rozdíl?

Odpovědět

Je to zobrazení obsahu speciální proměnné $@ v Bashi. Obsahuje všechny argumenty příkazového řádku a tento příkaz přebírá všechny argumenty z druhé a ukládá je do proměnné , variable.

Příklad

Zde je ukázkový skript.

#!/bin/bash echo ${@:2} variable=${@:3} echo $variable 

Ukázkový běh:

./ex.bash 1 2 3 4 5 2 3 4 5 3 4 5 

Reference

Komentáře

  • Všimněte si, že zobrazená technika shrnuje dané argumenty do jednoho tětiva. Pokud je potřebujete uchovat jako samostatné argumenty, použijte pole: vars=( "${@:2}" )
  • @glennjackman – děkujeme, že jste na to upozornili.
  • Také všimněte si použití složených závorek. Měli byste vždy používat složené závorky, ale Bash vám umožňuje je vynechat, když je kontext jednoznačný. $@ a ${@} jsou tedy totožné, i když ten druhý je " správnější " syntaxe. Závorky musíte použít s ${@:2}, protože $@:2 je nejednoznačný, a proto by měl být interpretován jako ${@}:2, což není totéž.

Odpověď

To „sa se nachází také v bash a posledních verzích zsh.

V ksh a bash máte přístup k několika prvkům pole pomocí syntaxe ${array[@]:first:length}, která rozšiřuje až na length (nebo všechny, pokud je length vynechán) prvků array pole (v seznamu prvků pole číselně seřazených podle indexů), počínaje prvním s indexem větším nebo rovným first. Když ve skalárním kontextu (jako zde v an přiřazení ke skalární proměnné) je seznam prvků spojen s mezerou ch návštěvníci s bash a ksh93 a s prvním znakem $IFS (nebo nic, pokud $IFS je prázdné nebo prázdné, pokud není nastaveno) s zsh.

Například:

$ a[23]=a a[5]=b a[235]=c a[45]=d $ x=${a[@]:12:2}; printf "<%s>\n" "$x" <a d> 

$@ je zvláštní případ. $@ je pole pozičních parametrů ($1, $2 …). Při použití s : je však zahrnut také $0. ${@:1} je tedy stejný jako $@, ne ${@:0} jako u jiných polí.

V zsh je to trochu jiné. zsh přidal ksh syntaxe pro kompatibilitu teprve nedávno, ale má vlastní syntaxi pro výběr rozsahů prvků.

Na rozdíl od ksh a bash, zsh pole jsou odlišný typ proměnné než skalární proměnné, nejsou řídká (zsh má asociativní pole jako jiný typ proměnné) a start v indexu 1 místo 0.

U zsh přistupujete k rozsahům prvků pole s $a[first,last] (kde last může být také záporné, aby se počítalo zpět od konce).

V zsh,

a[23]=a a[5]=b a[235]=c a[45]=d 

vytvoří pole s 235 prvky, většinou prázdnými. $a[12,50] by se rozšířil na prvky 12 až 50 a ${a[@]:12:2} by se rozšířil pouze na (prázdné) $a[12] a $a[13] prvky. Jako zvláštní případ a opět pro přenositelnost ksh93 a bash přijímá zsh také 0 první prvek pro $@ a považuje to za $0.

Takže můžete ${a[@]:x:n} a ${@:x:n} používat přenositelně ve všech 3 skořápkách, ale pouze pro nezřídka uspořádaná pole, a věnujte pozornost hodnota IFS.

Komentáře

  • Děkujeme za vysvětlení syntaxe indexování pole

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *