Bash parancsfájlokban:
csak úgy nevezzük meg a változót:
abc=ok
vagy használhatjuk a declare
declare abc=ok
mi a különbség?
és miért tesz a bash olyan sokféle módon egy változó létrehozására?
Megjegyzések
Válasz
Feladó: help -m declare
:
NÉV
declare
– Változóértékek és attribútumok beállítása.SYNOPSIS
declare
[-aAfFgilnrtux
] [-p
] [name
[=value
] …]LEÍRÁS
Változóértékek és attribútumok beállítása.
Változók deklarálása és adj nekik attribútumokat. Ha nincs megadva NAME, akkor jelenítse meg az összes változó attribútumait és értékeit.
Opciók:
-f
a művelet vagy a megjelenítés korlátozása a függvénynevekre és definíciókra
-F
a megjelenítést csak a függvénynevekre korlátozza (pl. a sorszám és a forrásfájl hibakereséskor)
-g
globális változókat hoz létre, ha shell funkcióban használják; egyébként figyelmen kívül hagyva
-p
megjelenítik az attribútumokat és az értéket az egyes NÉVEK
Attribútumokat beállító beállítások:
-a
NAMEs indexelt tömbök készítéséhez (ha támogatott)
-A
a NAMEs asszociatív tömbök létrehozásához (ha támogatottak)
-i
hogy a NAME-ok megkapják az egész attribútumot
-l
a NAME-ek kisbetűvé alakításához a hozzárendelésnél
-n
tegye a NAME hivatkozást az értékével elnevezett változóra
-r
hogy a NAME-ek újra adonly
-t
hogy a NAME-ek megkapják a trace attribútum
-u
a nevek konvertálásához nagybetű a
-x
névvel exportálás
A
+
a-
helyett kikapcsolja az adott attribútumot .Az egész attribútummal rendelkező változók számtani kiértékeléssel rendelkeznek (lásd a
let
parancsot), amikor a változóhoz értéket rendelnek.Amikor függvényben használva a
declare
lokálissá teszi a NAME-eket, mint azlocal
paranccsal. A-g
opció elnyomja ezt a viselkedést.Kilépés állapota:
Sikeres eredményt ad, kivéve, ha érvénytelen opciót adunk meg, vagy változó hozzárendelési hiba lép fel.LÁSD MÉG:
bash (1)
VÉGREHAJTÁS
GNU bash, 4.3.11 (1) verzió – kiadás (i686-pc-linux-gnu)
Szerzői jog (C) 2013 Free Software Foundation, Inc.
GPLv3 + licenc: GNU GPL 3. verzió vagy később < http : //gnu.org/licenses/gpl.html >
Tehát, declare
a változóértékek és az attribútumok beállítására szolgál.
Hadd mutassam meg kettő használatát attribútumok egy nagyon egyszerű példával:
$ # First Example: $ declare -r abc=ok $ echo $abc ok $ abc=not-ok bash: abc: readonly variable $ # Second Example: $ declare -i x=10 $ echo $x 10 $ x=ok $ echo $x 0 $ x=15 $ echo $x 15 $ x=15+5 $ echo $x 20
A fenti példából azt gondolom, hogy meg kell értenie a declare
változó a normál változóhoz képest! Ez a típusú declare
ation hasznos a függvényekben, a szkriptekkel ellátott ciklusokban.
Látogassa meg a változókat is: írja be vagy betűkészlet
Megjegyzések
- igen, a " és attribútumok " a lényeg! ez a különbség.
- Nagyszerű! Szeretem a példákat, a tanítás / tanulás legjobb módját. Köszönöm!
- Tudnia kell, hogy mi a " attribútum ", hogy megértse ezt a választ. ' a változó tulajdonságai, például ' egész ', ' tömb ', vagy ' csak olvasható '.
- Ez szép munkát végez a deklarálás magyarázatában, de teljesen figyelmen kívül hagyja azt, ami akkor történik, amikor egyszerűen egy változót deklarál a bash-on keresztül.
Válasz
abc=ok
értéket rendel a abc
változóhoz. A declare abc
a abc
nevű változót deklarálja. A kettő kombinálható declare abc=ok
néven.
A bash-ban a többi héjhoz hasonlóan a string és tömb változókat sem kell deklarálni, ezért declare
csak akkor szükséges, ha opciókat akar átadni, pl declare -A abc
hogy abc
asszociatív tömb legyen, vagy declare -r
, hogy egy változó csak olvasható legyen. A függvény belsejében azonban a declare
különbséget tesz: a változó lokálissá válik a függvény számára, vagyis a függvényen kívüli változó értéke (ha van) megmarad . (Hacsak nem használja az declare -g
alkalmazást, amely a változót nem lokálissá teszi; ez más opciókkal kombinálva hasznos, pl. declare -gA
egy globális létrehozásához asszociatív tömb egy függvényben.) Példa:
f () { declare a a="a in f" b="b in f" echo "From f: a is $a" echo "From f: b is $b" } a="Initial a" b="Initial b" f echo "After f: a is $a" echo "After f: b is $b"
Kimenet:
From f: a is a in f From f: b is b in f After f: a is Initial a After f: b is b in f
Egy másik amit a declare
beépített beépítéssel megtehetsz, az
A declare
beépített program egyedülálló a bash számára. Erősen ihletett és nagyon közel áll a ksh-hez “s typeset
beépített, és a bash a typeset
-t a a kompatibilitás érdekében. (Nem tudom, miért nem “bash” hívta csak typeset
). Van egy harmadik szinonima, local
. Van még export
is, amely megegyezik a declare -x
, ismét a kompatibilitás érdekében (minden Bourne-stílusú héjjal).
Megjegyzések
- igen! a ' és a ' opció a lényeg. p.s. ha megtervezem a bash-t, akkor hagyom, hogy a " viselkedése kijelentse, hogy " más és más elfogultsággal cselekszik. ez egyszerűvé teszi a dolgokat.
- Szép válasz. Egy további kérdés, melyik
export
,local
ésdeclare
közül melyik a leginkább kompatibilis más héjak? - @ 0xc0de
export
ash
összes változatában létezik.local
csak a bash és az zsh,declare
csak a bash fájlokban létezik.typeset
a ksh, a bash és a zsh fájlokban létezik.
declare
a NAME-eket lokálissá teszi, mint alocal
parancsnál. A-g
opció elnyomja ezt a viselkedést. Lásd:help declare
.declare
lehetővé teszi asszociatív tömbök, egész számok és olvasási csak változók. Ezenkívül kibővíti az argumentumait, így példáuldeclare $name=1
lehetségesek.