Wat is bij bash-scripting ' het verschil tussen declareren en een normale variabele?

In bash-scripting:

we maken een variabele door deze een naam te geven:

abc=ok 

of we kunnen declare

declare abc=ok 

gebruiken wat is het verschil?

en waarom maakt bash zoveel manieren om een variabele te maken?

Opmerkingen

  • Bij gebruik in een functie, declare maakt NAMEs lokaal, zoals met het local commando. De -g optie onderdrukt dit gedrag. Zie help declare.
  • declare maakt het mogelijk om associatieve arrays, gehele getallen en lees- alleen variabelen. Het breidt ook zijn argumenten uit, dus dingen als declare $name=1 zijn mogelijk.

Antwoord

Van help -m declare:

NAAM

    declare – Stel variabele waarden en attributen in.

SYNOPSIS

    declare [ -aAfFgilnrtux ] [ -p ] [ name [=value] …]

BESCHRIJVING

    Stel variabele waarden en attributen in.

    Declareer variabelen en geef ze attributen. Als er geen NAAM is opgegeven, geeft u de attributen en waarden van alle variabelen weer.

    Opties:

      -f

        actie of weergave beperken tot functienamen en definities

      -F

        weergave beperken tot alleen functienamen (plus regelnummer en bronbestand bij foutopsporing)

      -g

        maak globale variabelen bij gebruik in een shell-functie; anders genegeerd

      -p

        geef de attributen en waarde weer van elke NAAM

    Opties die attributen instellen:

      -a

        om NAMEs geïndexeerde arrays te maken (indien ondersteund)

      -A

        om NAMEs associatieve arrays te maken (indien ondersteund)

      -i

        om ervoor te zorgen dat NAMEN het kenmerk integer hebben

      -l

        om NAMEs om te zetten in kleine letters bij toewijzing

      -n

        maak van NAME een verwijzing naar de variabele met zijn waarde

      -r

        om NAMEN opnieuw te maken adonly

      -t

        om NAMEN de trace attribuut

      -u

        om NAMEN te converteren naar hoofdletters bij toewijzing

      -x

        om NAMEN te maken exporteren

    Met + in plaats van - schakelt het opgegeven kenmerk uit .

    Variabelen met het integer-attribuut hebben een rekenkundige evaluatie (zie het let -commando) die wordt uitgevoerd wanneer aan de variabele een waarde wordt toegewezen.

    Wanneer gebruikt in een functie, declare maakt NAMEN lokaal, zoals bij het local commando. De optie -g onderdrukt dit gedrag.

    Afsluitstatus:
    Retourneert succes, tenzij een ongeldige optie wordt opgegeven of een fout optreedt bij het toewijzen van variabelen.

ZIE OOK

    bash (1)

IMPLEMENTATIE

    GNU bash, versie 4.3.11 (1) -release (i686-pc-linux-gnu)
    Copyright (C) 2013 Free Software Foundation, Inc.
    Licentie GPLv3 +: GNU GPL versie 3 of hoger < http : //gnu.org/licenses/gpl.html >


Dus, declare wordt gebruikt voor het instellen van variabele waarden en attributen .

Ik zal het gebruik van twee laten zien attributen met een heel eenvoudig voorbeeld:

$ # 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 

Uit het bovenstaande voorbeeld denk ik dat je het gebruik van declare variabele boven normale variabele! Dit type declare ation is handig in functies, loops met scripting.

Bezoek ook Typevariabelen: declareren of gezet

Reacties

  • ja, de " en attributen " is het punt! dit is het verschil.
  • Geweldig! Ik hou van voorbeelden, de beste manier om les te geven / te leren. Bedankt!
  • U moet weten wat " attributen " zijn om dit antwoord te begrijpen. Ze ' hebben eigenschappen van de variabele zoals ' geheel getal ', ' array ', of ' alleen-lezen '.
  • Dit is een goed werk om declare uit te leggen, maar negeert volledig wat er gebeurt als je simpelweg een variabele declareert via bash.

Answer

abc=ok wijst een waarde toe aan de variabele abc. declare abc declareert een variabele met de naam abc. De twee kunnen worden gecombineerd als declare abc=ok.

In bash hoeven, net als andere shells, string- en array-variabelen niet te worden gedeclareerd, dus declare is niet nodig, tenzij u opties wilt doorgeven, bijv. declare -A abc om van abc een associatieve array te maken of declare -r om een variabele alleen-lezen te maken. Binnen een functie maakt declare echter een verschil: het zorgt ervoor dat de variabele lokaal is voor de functie, wat betekent dat de waarde van de variabele buiten de functie (indien aanwezig) behouden blijft . (Tenzij u declare -g gebruikt, waardoor de variabele niet lokaal is; dit is handig in combinatie met andere opties, bijv. declare -gA om een globale associatieve array in een functie.) Voorbeeld:

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" 

Uitvoer:

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 

Nog een wat je kunt doen met de declare ingebouwde is

De declare ingebouwde is uniek voor bash. Het “is sterk geïnspireerd en lijkt erg op ksh” s typeset ingebouwd, en bash biedt typeset als synoniem van declare voor compatibiliteit. (Ik weet niet waarom bash het niet typeset noemde). Er is “een derde synoniem, local. Er is” ook export, wat hetzelfde is als declare -x, nogmaals voor compatibiliteit (met elke Bourne-achtige shell).

Reacties

  • ja! het ' en optie ' is het punt. p.s. als ik de bash ontwerp, laat ik het gedrag van " " iets in andere omstandigheden doen. dit maakt de zaken eenvoudig.
  • Mooi antwoord. Nog een vraag, welke van export, local en declare het meest compatibel is met andere shells?
  • @ 0xc0de export bestaat in alle varianten van sh. local bestaat alleen in bash en zsh, declare alleen in bash. typeset bestaat in ksh, bash en zsh.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *