In Bash-Skripten:
Wir erstellen Variablen, indem wir sie einfach benennen:
abc=ok
oder wir können verwenden declare
declare abc=ok
was ist der Unterschied?
und warum bietet bash so viele möglichkeiten, eine variable zu erstellen?
bash
shell-script
variable
Liebesfeder
quelle
quelle
declare
wird NAME wie beimlocal
Befehl als lokal definiert . Die-g
Option unterdrückt dieses Verhalten. Sehenhelp declare
.declare
Ermöglicht das Erstellen von assoziativen Arrays, Ganzzahlen und schreibgeschützten Variablen. Außerdem erweitert es seine Argumente, so dass Dinge wiedeclare $name=1
möglich sind.Antworten:
Von
help -m declare
:Wird
declare
also zum Festlegen von Variablenwerten und Attributen verwendet .Lassen Sie mich die Verwendung von zwei Attributen anhand eines sehr einfachen Beispiels zeigen:
Anhand des obigen Beispiels sollten Sie die Verwendung von
declare
Variablen über normale Variablen verstehen ! Diese Art vondeclare
Funktion ist nützlich in Funktionen, Schleifen mit Skripten.Besuchen Sie auch Typing variables: declare oder typeset
quelle
abc=ok
Weist der Variablen einen Wert zuabc
.declare abc
deklariert eine Variable namensabc
. Die beiden können kombiniert werden alsdeclare abc=ok
.In bash müssen String- und Array-Variablen wie andere Shells nicht deklariert werden. Dies
declare
ist nur erforderlich, wenn Sie Optionen übergeben möchten, z. B.declare -A abc
umabc
ein assoziatives Array zu erstellen oderdeclare -r
eine Variable schreibgeschützt zu machen. Innerhalb einer Funktiondeclare
macht es jedoch einen Unterschied: Es bewirkt, dass die Variable lokal für die Funktion ist, was bedeutet, dass der Wert der Variablen außerhalb der Funktion (falls vorhanden) beibehalten wird. (Es sei denn, Sie verwendendeclare -g
, wodurch die Variable nicht lokal wird. Dies ist nützlich, wenn Sie sie mit anderen Optionen kombinieren, z. B.declare -gA
um ein globales assoziatives Array in einer Funktion zu erstellen.) Beispiel:Ausgabe:
Eine andere Sache, die Sie mit dem
declare
eingebauten tun können, istDas
declare
eingebaute ist einzigartig zu schlagen. Es ist stark inspiriert und kommt dem von ksh sehr nahe.typeset
Bash isttypeset
ein Synonymdeclare
für Kompatibilität. (Ich weiß nicht, warum bash es nicht einfach genannt hattypeset
). Es gibt ein drittes Synonymlocal
. Es gibt aus Kompatibilitätsgründen (mit jeder Bourne-artigen Shell) auchexport
das Gleiche wiedeclare -x
.quelle
export
,local
unddeclare
ist kompatibel mit den meisten anderen Shells?export
existiert in allen Varianten vonsh
.local
existiert nur in bash und zsh,declare
nur in bash.typeset
existiert in ksh, bash und zsh.