A bash szkriptelés során mi a ' különbség a deklarál és egy normál változó között?

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

  • Ha egy függvényben használják, declare a NAME-eket lokálissá teszi, mint a local 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ául declare $name=1 lehetségesek.

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 az local 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 és declare közül melyik a leginkább kompatibilis más héjak?
  • @ 0xc0de export a sh ö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.

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