Mit jelent ez az $ {@: 2} a shell parancsfájlokban

Ezt látom egy shell parancsfájlban.

variable=${@:2} 

Mit csinál?

Megjegyzések

  • Pontosan ez mutatkozott meg a szkriptben? A szintaxis tömbnek tűnik, de hiányzik néhány darab. Kérem, írjon pár sort a szkript e sora körül?
  • Ez egy változó a második betűtől kezdődően. var="my_value"; echo var="${var[@]:2}"; echo "$var" Látja a különbséget?

Válasz

Ez “s a $@ speciális változó tartalmának megjelenítése a Bash-ban. Ez tartalmazza az összes parancssori argumentumot, és ez a parancs átveszi a második argumentum összes argumentumát és tárolja őket egy változóban , variable.

Példa

Itt egy exampe szkript.

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

Példa futásra:

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

Referenciák

Megjegyzések

  • Ne feledje, hogy a bemutatott technika a megadott argumentumokat egyetlen eggyé keveri húr. Ha külön argumentumként kell megtartania őket, használjon egy tömböt: vars=( "${@:2}" )
  • @glennjackman – köszönöm, hogy felhívta a figyelmét.
  • vegye figyelembe a göndör zárójelek használatát. Állítólag mindig göndör zárójeleket használ, de a Bash lehetővé teszi, hogy ezeket kihagyja, ha a kontextus egyértelmű. Ezért a $@ és a ${@} azonos, bár ez utóbbi a " helyesebb " szintaxis. A zárójeleket a következővel kell használnia: ${@:2}, mert az $@:2 nem egyértelmű és ezért ${@}:2, ami nem ugyanaz.

Válasz

Ez a “sa ksh funkció megtalálható a bash és a zsh legújabb verzióiban is.

A ksh és bash, egy tömb több eleméhez hozzáférhet a ${array[@]:first:length} szintaxissal, amely kibővül akár length (vagy az összes, ha length hiányzik) array tömb (a tömb elemeinek listájában numerikusan rendezve az indexeken), kezdve az elsővel, amelynek indexe nagyobb vagy egyenlő, mint first. Ha skaláris kontextusban van (például itt egy hozzárendelés egy skaláris változóhoz) az elemek listáját összekötjük a ch szóközzel karakterek bash és ksh93 és $IFS első karakterével (vagy semmivel, ha $IFS üres vagy szóköz, ha nincs beállítva) a következővel: zsh.

Például:

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

$@ különleges eset. A $@ a helyzeti paraméterek tömbje ($1, $2 …). De ha : vel használjuk, akkor a $0 is szerepel. Tehát ${@:1} megegyezik a $@ -vel, nem pedig ${@:0}, mint más tömböknél.

A zsh mezőben ez kissé eltér. zsh hozzáadta a ksh a szintaxis a közelmúltban a kompatibilitás érdekében, de saját szintaxisa van az elemtartományok kiválasztásához.

Ellentétben a ksh és bash, zsh tömbök a skaláris változóktól eltérő változótípusok, nem ritkák (zsh asszociatív tömbök más változótípusként vannak)

esetén a $a[first,last] (ahol last szintén negatív lehet, ha a végétől visszafelé számolunk).

A zsh mezőben

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

tömböt hoz létre 235 elemből, amelyek többsége üres. $a[12,50] a 12-től 50-ig terjed, és az ${a[@]:12:2} csak az (üres) $a[12] és $a[13] elemeket. Különleges esetként, és még egyszer a ksh93 és a bash hordozhatóság érdekében a zsh is elfogadja a 0 első elem a $@ számára, és ezt $0.

Tehát a ${a[@]:x:n} és a ${@:x:n} fájlokat hordozható módon használhatja mind a 3 kagylóban, de csak a nem ritka tömbökhöz, és figyeljen az IFS értéke.

Megjegyzések

  • Köszönjük, hogy elmagyarázta a tömb indexelő szintaxisát

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük