Kann jemand den Unterschied zwischen Deklaration und Satz anhand von Beispielen aus dem wirklichen Leben erklären.
Antwort
In bash
typeset
und declare
sind genau gleich. Der einzige Unterschied besteht darin, dass typeset
als veraltet angesehen wird.
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ... Set variable values and attributes. Obsolete. See `help declare".
Die Manpage listet sie sogar in einem Atemzug auf:
declare [-aAfFgilrtux] [-p] [name[=value] ...] typeset [-aAfFgilrtux] [-p] [name[=value] ...] Declare variables and/or give them attributes.
typeset
kann auf einige andere Shells portiert werden, z. B. ksh93
. Wenn Sie eine Shell-übergreifende Portabilität anstreben, verwenden Sie typeset
(und stellen Sie sicher, dass die Art und Weise, wie Sie es aufrufen, portabel ist). Wenn Sie sich nicht für eine solche Portabilität interessieren, verwenden Sie declare
.
Kommentare
- können Sie bitte Geben Sie ein Beispiel dafür, wo und warum diese Verwendung im Bash-Skript
- … wie gesagt, sie sind genau gleich. Ich verstehe ' nicht, wie ich kann sie unterscheiden, wenn sie so sind.
- Gut. Beachten Sie, dass " veraltet " nur in
help typeset
, nicht inman typeset
. - @ChrisDown, Sie würden ' nicht Sie wissen nicht genau, warum
typeset
als veraltet gilt?
Antwort
Ich kenne einen Fall, in dem declare
nützlich ist, um das Böse zu vermeiden. eval
: variable Indirektion :
$ var=foo $ x=var $ declare "$x=another_value" $ echo $var another_value
Kommentare
- Dies ist ein schöner Kommentar, aber wie beantwortet das die Frage, die ist ab out
typeset
unddeclare
? - Dies wird von Chris Down bereits gut beantwortet. Meine Antwort ist nur ein Fall, in dem es ' ist nützlich
- Vielleicht war ich ' nicht klar. Kommentare sollten Kommentare sein, und Antworten sollten Antworten sein. Dies ist ein Kommentar, keine Antwort.
- Mein Snippet würde ' in einem Kommentar nicht klar sein
- , aber Sie können trotzdem Variablen zuweisen Schriftsatz … Ersetzen Sie einfach deklarieren durch Schriftsatz und Sie erhalten immer noch das gleiche Ergebnis.