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:
-frajoita toiminto tai näyttö toimintojen nimiin ja määritelmiin
-Frajoita näyttö vain toimintojen nimiin (plus rivinumero ja lähdetiedosto virheenkorjauksessa)
-gluo globaaleja muuttujia, kun niitä käytetään kuoritoiminnossa; muuten ohitettu
-pnäyttää määritteet ja arvon jokaisen NIMEN nimi
Määritteet asettavat vaihtoehdot:
-atehdäksesi NAME-indeksoituja taulukoita (jos niitä tuetaan)
-ANAMEs-assosiatiivisten taulukoiden muodostamiseksi (jos tuettu)
-i, jotta NIMILLE saadaan attribuutti kokonaisluku
-lmuuntaa NAME-tiedostot pieniksi kirjaimiksi tehtävässä
-ntee NAME viitteeksi muuttujalle, jonka nimi on sen arvo
-rsaadaksesi NAME uudelleensuuntautumaan adonly
-t, jotta NIMILLE olisi trace attribute
-umuuntaa NAME-tiedostot isot kirjaimet tehtävässä
-xtehdä 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,
declaretekee NAME-nimistä paikalliset, kuten komennossalocal. Vaihtoehto-gestää 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,localjadeclareon eniten yhteensopiva muut kuoret? - @ 0xc0de
exporton kaikissash-versioissa.localon olemassa vain bash ja zsh,declarevain bash.typeseton tiedostoissa ksh, bash ja zsh.
declaretekee NAME-nimistä paikalliset, kuten komennonlocalyhteydessä. Vaihtoehto-gestää tämän toiminnan. Katsohelp declare.declaremahdollistaa assosiatiivisten taulukoiden, kokonaislukujen ja luku- vain muuttujat. Lisäksi se laajentaa argumenttejaan, joten esimerkiksideclare $name=1ovat mahdollisia.