Bash-komentosarjoissa:
luomme muuttujan vain nimeämällä sen:
abc=ok
tai voimme käyttää declare
declare abc=ok
mikä ero on?
ja miksi bash tekee niin monia tapoja luoda muuttuja?
Kommentit
Vastaa
Lähettäjä help -m declare
:
NIMI
declare
– Aseta muuttujan arvot ja määritteet.SYNOPSIS
declare
[-aAfFgilnrtux
] [-p
] [name
[=value
] …]KUVAUS
Aseta muuttujien arvot ja määritteet.
Ilmoita muuttujat ja anna heille määritteet. Jos NAME-nimiä ei anneta, näytä kaikkien muuttujien määritteet ja arvot.
Vaihtoehdot:
-f
rajoita toiminto tai näyttö toimintojen nimiin ja määritelmiin
-F
rajoita näyttö vain toimintojen nimiin (plus rivinumero ja lähdetiedosto virheenkorjauksessa)
-g
luo globaaleja muuttujia, kun niitä käytetään kuoritoiminnossa; muuten ohitettu
-p
näyttää määritteet ja arvon jokaisen NIMEN nimi
Määritteet asettavat vaihtoehdot:
-a
tehdäksesi NAME-indeksoituja taulukoita (jos niitä tuetaan)
-A
NAMEs-assosiatiivisten taulukoiden muodostamiseksi (jos tuettu)
-i
, jotta NIMILLE saadaan attribuutti kokonaisluku
-l
muuntaa NAME-tiedostot pieniksi kirjaimiksi tehtävässä
-n
tee NAME viitteeksi muuttujalle, jonka nimi on sen arvo
-r
saadaksesi NAME uudelleensuuntautumaan adonly
-t
, jotta NIMILLE olisi trace attribute
-u
muuntaa NAME-tiedostot isot kirjaimet tehtävässä
-x
tehdä nimiä NAME vienti
Käyttämällä
+
merkinnän-
sijasta sammuttaa annetun attribuutin .Kokonaisluku-attribuutilla varustetuilla muuttujilla on aritmeettinen arviointi (katso komento
let
), kun muuttujalle on annettu arvo.Kun käytetään funktiossa,
declare
tekee NAME-nimistä paikalliset, kuten komennossalocal
. Vaihtoehto-g
estää tämän toiminnan.Poistumistila:
Palauttaa onnistumisen, ellei toimiteta virheellistä vaihtoehtoa tai tapahtuu muuttujan määritysvirhe.KATSO MYÖS
bash (1)
TOTEUTUS
GNU bash, versio 4.3.11 (1) -julkaisu (i686-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
Lisenssi GPLv3 +: GNU GPL -versio 3 tai uudempi < http : //gnu.org/licenses/gpl.html >
Joten, declare
-asetusta käytetään muuttujien arvojen ja määritteiden asettamiseen.
Haluan näyttää kahden käytön määritteet hyvin yksinkertaisella esimerkillä:
$ # 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
Yllä olevasta esimerkistä mielestäni sinun pitäisi ymmärtää declare
muuttuja normaalimuuttujan yli! Tämän tyyppinen declare
ation on hyödyllinen funktioissa, komentosarjoilla varustetuissa silmukoissa.
Käy myös osoitteessa Kirjoitusmuuttujat: deklaroi tai typet
Kommentit
- kyllä, " ja määritteet " on asia! tämä on ero.
- Hienoa! Rakastan esimerkkejä, paras tapa opettaa / oppia. Kiitos!
- Sinun on tiedettävä, mitä " määritteet " ymmärtävät tämän vastauksen. Ne ' muuttavat muuttujan ominaisuuksia, kuten ' kokonaisluku ', ' taulukko ' tai ' vain lukea '.
- Tämä tekee hyvää työtä selittämällä ilmoitusta, mutta jättää täysin huomiotta sen, mitä tapahtuu, kun yksinkertaisesti ilmoitat muuttujan bashin kautta.
Vastaa
abc=ok
määrittää arvon muuttujalle abc
. declare abc
julistaa muuttujan nimeltä abc
. Nämä kaksi voidaan yhdistää nimellä declare abc=ok
.
Bashissa, kuten muissakin kuoreissa, merkkijono- ja matriisimuuttujia ei tarvitse ilmoittaa, joten declare
ei ole tarpeen, ellet halua välittää vaihtoehtoja, esim declare -A abc
tehdäksesi abc
assosiatiivisen taulukon tai declare -r
muuttujan olevan vain luku -muodossa. Funktion sisällä declare
kuitenkin vaikuttaa: se saa muuttujan paikallistamaan funktion, mikä tarkoittaa, että funktion ulkopuolella olevan muuttujan (jos sellainen on) arvo säilyy . (Ellet käytä declare -g
-toimintoa, jolloin muuttuja ei ole paikallinen; tämä on hyödyllinen yhdistettynä muihin asetuksiin, esim. declare -gA
luoda globaali assosiatiivinen taulukko funktiossa.) Esimerkki:
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"
Tulos:
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
Toinen asia, jonka voit tehdä sisäänrakennetulla declare
, on
Sisäänrakennettu declare
on ainutlaatuinen bashille. Se on voimakkaasti innoittamana ja hyvin lähellä ksh ”s typeset
sisäänrakennettua, ja bash tarjoaa typeset
synonyyminä declare
yhteensopivuutta varten. (En tiedä miksi bash ei vain kutsunut sitä typeset
). Siellä ”on kolmas synonyymi, local
. Siellä on myös export
, joka on sama kuin declare -x
, jälleen yhteensopivuuden vuoksi (jokaisen Bourne-tyylisen kuoren kanssa).
kommentit
- kyllä! ' ja vaihtoehto ' on kohta. p.s. jos suunnittelen bashin, annan " -käyttäytymisen julistaa " -toiminnon tekevän jotakin erilaista. tämä tekee asioista yksinkertaisia.
- Hyvä vastaus. Toinen kysymys, kumpi joukosta
export
,local
jadeclare
on eniten yhteensopiva muut kuoret? - @ 0xc0de
export
on kaikissash
-versioissa.local
on olemassa vain bash ja zsh,declare
vain bash.typeset
on tiedostoissa ksh, bash ja zsh.
declare
tekee NAME-nimistä paikalliset, kuten komennonlocal
yhteydessä. Vaihtoehto-g
estää tämän toiminnan. Katsohelp declare
.declare
mahdollistaa assosiatiivisten taulukoiden, kokonaislukujen ja luku- vain muuttujat. Lisäksi se laajentaa argumenttejaan, joten esimerkiksideclare $name=1
ovat mahdollisia.