Hva i bash scripting, hva ' er forskjellen mellom deklarere og en normal variabel?

I bash scripting:

lager vi variabel ved å bare navngi den:

abc=ok 

eller vi kan bruke declare

declare abc=ok 

hva er forskjellen?

og hvorfor lager bash så mange måter å opprette en variabel på?

Kommentarer

  • Når den brukes i en funksjon, declare gjør NAVN lokale, som med local -kommandoen. Alternativet -g undertrykker denne oppførselen. Se help declare.
  • declare gjør det mulig å lage assosiative matriser, heltall og lese- bare variabler. Det utvider også argumentene, så ting som declare $name=1 er mulig.

Svar

Fra help -m declare:

NAVN

    declare – Still variabelverdier og attributter.

SYNOPSIS

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

BESKRIVELSE

    Angi variabelverdier og attributter.

    Deklarer variabler og gi dem attributter. Hvis ingen NAVN er gitt, kan du vise attributtene og verdiene til alle variablene.

    Alternativer:

      -f

        begrense handling eller visning til funksjonsnavn og definisjoner

      -F

        begrense visningen til funksjonsnavn (pluss linjenummer og kildefil ved feilsøking)

      -g

        oppretter globale variabler når de brukes i en skallfunksjon; ellers ignorert

      -p

        viser attributtene og verdien av hvert NAVN

    Alternativer som angir attributter:

      -a

        for å lage NAME-indekserte matriser (hvis støttet)

      -A

        for å lage NAMEs assosiative matriser (hvis støttet)

      -i

        for å få NAVN til attributtet heltall

      -l

        for å konvertere NAVN til små bokstaver ved tildeling

      -n

        gjør NAME til en referanse til variabelen oppkalt etter verdien

      -r

        for å få NAVN til bare

      -t

        for å få NAVN til å ha spore attributt

      -u

        for å konvertere NAVN til store bokstaver på oppdrag

      -x

        for å lage NAVN eksporter

    Bruk + i stedet for - slår av det gitte attributtet .

    Variabler med heltallattributtet har aritmetisk evaluering (se kommandoen let) når variabelen er tildelt en verdi.

    Når brukt i en funksjon, gjør declare NAVN lokale, som med local -kommandoen. Alternativet -g undertrykker denne oppførselen.

    Avslutt status:
    Returnerer suksess med mindre et ugyldig alternativ leveres eller det oppstår en variabel tildelingsfeil.

SE OGSÅ

    bash (1)

IMPLEMENTERING

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


Så, declare brukes til å sette variabelverdier og attributter .

La meg vise bruken av to attributter med et veldig enkelt eksempel:

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

Fra eksemplet ovenfor synes jeg du bør forstå bruken av declare variabel over normal variabel! Denne typen declare ation er nyttig i funksjoner, sløyfer med skript.

Besøk også Skrivevariabler: erklær eller typesett

Kommentarer

  • ja, " og attributter " er poenget! dette er forskjellen.
  • Flott! Jeg elsker eksempler, den beste måten å lære / lære på. Takk!
  • Du trenger å vite hva " attributter " er for å forstå dette svaret. De ' er egenskapene til variabelen som ' heltall ', ' array ', eller ' skrivebeskyttet '.
  • Dette gjør en fin jobb med å forklare erklær, men ignorerer fullstendig hva som skjer når du bare erklærer en variabel gjennom bash.

Svar

abc=ok tilordner en verdi til variabelen abc. declare abc erklærer en variabel kalt abc. De to kan kombineres som declare abc=ok.

I bash, som andre skjell, trenger ikke streng- og arrayvariabler deklareres, så declare er ikke nødvendig med mindre du vil passere alternativer, f.eks declare -A abc for å gjøre abc til en assosiativ matrise eller declare -r for å lage en variabel skrivebeskyttet. Inne i en funksjon gjør declare imidlertid en forskjell: det fører til at variabelen er lokal for funksjonen, noe som betyr at verdien av variabelen utenfor funksjonen (hvis noen) er bevart . (Med mindre du bruker declare -g, noe som gjør at variabelen ikke er lokal; dette er nyttig når det kombineres med andre alternativer, f.eks. declare -gA for å skape en global assosiativ matrise i en funksjon.) Eksempel:

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" 

Utgang:

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 

En annen ting du kan gjøre med declare innebygd er

declare innebygd er unik for bash. Den er sterkt inspirert og veldig nær ksh «s typeset innebygd, og bash gir typeset som et synonym for declare for kompatibilitet. (Jeg vet ikke hvorfor bash ikke bare kalte det typeset). Der er et tredje synonym local. Det er også export, som er det samme som declare -x, igjen for kompatibilitet (med alle Bourne-stil skall).

Kommentarer

  • ja! ' og alternativ ' er poenget. p.s. hvis jeg designer bash, vil jeg la oppførselen til " erklære " gjøre noen ting i annen kondisjon. dette gjør ting enkelt.
  • Fint svar. Et ytterligere spørsmål, hvilken blant export, local og declare er den mest kompatible med andre skjell?
  • @ 0xc0de export finnes i alle varianter av sh. local eksisterer bare i bash og zsh, declare bare i bash. typeset finnes i ksh, bash og zsh.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *