Ezt látom egy shell parancsfájlban.
variable=${@:2}
Mit csinál?
Megjegyzések
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
var="my_value"; echo var="${var[@]:2}"; echo "$var"
Látja a különbséget?