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
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:
-factie of weergave beperken tot functienamen en definities
-Fweergave beperken tot alleen functienamen (plus regelnummer en bronbestand bij foutopsporing)
-gmaak globale variabelen bij gebruik in een shell-functie; anders genegeerd
-pgeef de attributen en waarde weer van elke NAAM
Opties die attributen instellen:
-aom NAMEs geïndexeerde arrays te maken (indien ondersteund)
-Aom NAMEs associatieve arrays te maken (indien ondersteund)
-iom ervoor te zorgen dat NAMEN het kenmerk integer hebben
-lom NAMEs om te zetten in kleine letters bij toewijzing
-nmaak van NAME een verwijzing naar de variabele met zijn waarde
-rom NAMEN opnieuw te maken adonly
-tom NAMEN de trace attribuut
-uom NAMEN te converteren naar hoofdletters bij toewijzing
-xom 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,
declaremaakt NAMEN lokaal, zoals bij hetlocalcommando. De optie-gonderdrukt 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,localendeclarehet meest compatibel is met andere shells? - @ 0xc0de
exportbestaat in alle varianten vansh.localbestaat alleen in bash en zsh,declarealleen in bash.typesetbestaat in ksh, bash en zsh.
declaremaakt NAMEs lokaal, zoals met hetlocalcommando. De-goptie onderdrukt dit gedrag. Ziehelp declare.declaremaakt het mogelijk om associatieve arrays, gehele getallen en lees- alleen variabelen. Het breidt ook zijn argumenten uit, dus dingen alsdeclare $name=1zijn mogelijk.