Hvad i bash-scripting, hvad ' er forskellen mellem erklær og en normal variabel?

I bash scripting:

opretter vi variabel ved blot at navngive den:

abc=ok 

eller vi kan bruge declare

declare abc=ok 

hvad er forskellen?

og hvorfor laver bash så mange måder at oprette en variabel på?

Kommentarer

  • Når de bruges i en funktion, declare gør NAVNE lokale som med local kommandoen. Indstillingen -g undertrykker denne adfærd. Se help declare.
  • declare gør det muligt at oprette associerende arrays, heltal og læse kun variabler. Det udvider også sine argumenter, så ting som declare $name=1 er mulige.

Svar

Fra help -m declare:

NAVN

    declare – Indstil variable værdier og attributter.

SYNOPSIS

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

BESKRIVELSE

    Indstil variable værdier og attributter.

    Erklær variabler og giv dem attributter. Hvis der ikke er angivet NAVNE, skal du vise attributterne og værdierne for alle variabler.

    Valgmuligheder:

      -f

        begræns handlingen eller visningen til funktionsnavne og definitioner

      -F

        begrænser kun visningsfunktionsnavne (plus linienummer og kildefil ved fejlretning)

      -g

        skaber globale variabler, når de bruges i en shell-funktion; ellers ignoreret

      -p

        vise attributter og værdi af hvert NAVN

    Indstillinger, der angiver attributter:

      -a

        for at lave NAME-indekserede arrays (hvis understøttet)

      -A

        for at gøre NAVNE associerende arrays (hvis understøttet)

      -i

        for at få NAVN til atributten heltal

      -l

        for at konvertere NAVNE til små bogstaver ved tildeling

      -n

        gør NAME til en reference til variablen navngivet efter dens værdi

      -r

        for at gøre NAVNE til adonly

      -t

        for at få NAVN til at have spore attribut

      -u

        for at konvertere NAVNE til store bogstaver ved opgave

      -x

        for at oprette NAVNE eksport

    Brug af + i stedet for - deaktiverer den givne attribut .

    Variabler med heltalattributten har aritmetisk evaluering (se kommandoen let), når variablen tildeles en værdi.

    Når bruges i en funktion, declare gør NAVNE lokale som med kommandoen local. Muligheden -g undertrykker denne adfærd.

    Afslut status:
    Returnerer succes, medmindre en ugyldig mulighed leveres, eller der opstår en variabel tildelingsfejl.

SE OGSÅ

    bash (1)

IMPLEMENTERING

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


declare bruges til at indstille variable værdier og attributter .

Lad mig vise brugen af to attributter med et meget simpelt 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 ovenstående eksempel synes jeg, du skal forstå brugen af declare variabel over normal variabel! Denne type declare ation er nyttig i funktioner, sløjfer med scripting.

Besøg også Typevariabler: erklær eller typesæt

Kommentarer

  • ja, " og attributter " er pointen! dette er forskellen.
  • Fantastisk! Jeg elsker eksempler, den bedste måde at undervise / lære på. Tak!
  • Du skal vide, hvad " attributter " er for at forstå dette svar. De ' er egenskaberne for variablen som ' heltal ', ' array ' eller ' skrivebeskyttet '. li>
  • Dette gør et godt stykke arbejde med at forklare erklær, men ignorerer fuldstændigt, hvad der sker, når du blot erklærer en variabel gennem bash.

Svar

abc=ok tildeler en værdi til variablen abc. declare abc erklærer en variabel kaldet abc. De to kan kombineres som declare abc=ok.

I bash, som andre skaller, skal streng- og array-variabler ikke erklæres, så declare er ikke nødvendigt, medmindre du vil videregive indstillinger, f.eks declare -A abc for at gøre abc til et associerende array eller declare -r for at gøre en variabel skrivebeskyttet. Inde i en funktion gør declare dog en forskel: det får variablen til at være lokal for funktionen, hvilket betyder, at værdien af variablen uden for funktionen (hvis nogen) bevares . (Medmindre du bruger declare -g, hvilket gør variablen ikke lokal; dette er nyttigt, når det kombineres med andre muligheder, f.eks. declare -gA for at skabe et globalt associativ matrix i en funktion.) 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" 

Output:

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 anden ting du kan gøre med declare indbygget er

declare indbygget er unik for bash. Det er stærkt inspireret og meget tæt på ksh “s typeset indbygget, og bash giver typeset som et synonym for declare for kompatibilitet. (Jeg ved ikke, hvorfor bash ikke bare kaldte det typeset). Der er et tredje synonym local. Der er også export, hvilket er det samme som declare -x, igen for kompatibilitet (med hver Bourne-stil shell).

Kommentarer

  • ja! ' og indstilling ' er pointen. p.s. hvis jeg designer bash, vil jeg lade " erklære " gøre nogle ting i forskellige forhold. dette gør tingene enkle.
  • Dejligt svar. Et yderligere spørgsmål, hvilket blandt export, local og declare er det mest kompatible med andre skaller?
  • @ 0xc0de export findes i alle varianter af sh. local findes kun i bash og zsh, declare kun i bash. typeset findes i ksh, bash og zsh.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *