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:
-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 hetlocal
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
endeclare
het meest compatibel is met andere shells? - @ 0xc0de
export
bestaat in alle varianten vansh
.local
bestaat alleen in bash en zsh,declare
alleen in bash.typeset
bestaat in ksh, bash en zsh.
declare
maakt NAMEs lokaal, zoals met hetlocal
commando. De-g
optie onderdrukt dit gedrag. Ziehelp declare
.declare
maakt het mogelijk om associatieve arrays, gehele getallen en lees- alleen variabelen. Het breidt ook zijn argumenten uit, dus dingen alsdeclare $name=1
zijn mogelijk.