Was ist der Unterschied zwischen declare und typeset?


22

Kann jemand den Unterschied zwischen Deklarieren und Setzen anhand von Beispielen aus der Praxis erklären?

Antworten:


27

In bash, typesetund declaresind genau die gleichen. Der einzige Unterschied ist, dass dies typesetals veraltet gilt.

typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

Die Manpage listet sie sogar im selben Atemzug auf:

declare [-aAfFgilrtux] [-p] [name[=value] ...]
typeset [-aAfFgilrtux] [-p] [name[=value] ...]
    Declare variables and/or give them attributes.

typesetist zum Beispiel auf einige andere Shells übertragbar ksh93. Wenn Sie Cross-Shell-Portabilität anstreben, verwenden Sie typeset(und stellen Sie sicher, dass die Art und Weise, wie Sie sie aufrufen, portabel ist). Wenn Sie sich nicht für eine solche Portabilität interessieren, verwenden Sie declare.


Kannst du bitte ein Beispiel dafür geben, wo und warum dies im Bash-Skript verwendet wird
Rahul Patil,

1
... wie gesagt, sie sind genau gleich. Ich verstehe nicht, wie ich sie unterscheiden kann, wenn sie so sind.
Chris Down

2
Gut Beachten Sie, dass "veraltet" nur in angezeigt wird help typeset, nicht in man typeset.
Fedorqui

2
@ ChrisDown, du würdest nicht zufällig wissen, warum genau dies typesetals veraltet gilt?
Alexej Magura

3

Ich kenne einen Fall, in dem declarees nützlich ist, das Böse zu vermeiden eval: variable Indirektion :

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value

Das ist ein netter Kommentar, aber wie beantwortet das die Frage, um die es geht typesetund declare?
JW013

Dies wird bereits von Chris Down gut beantwortet, meine Antwort ist nur ein Fall, in dem es nützlich ist
Gilles Quenot

Vielleicht war ich nicht klar. Kommentare sollten Kommentare sein und Antworten sollten Antworten sein. Dies ist ein Kommentar, keine Antwort.
jw013

3
Mein Ausschnitt wurde in einem Kommentar nicht
gelöscht

Sie können jedoch weiterhin Variablen mit Typensatz zuweisen. Ersetzen Sie "declare" durch "typeset", und Sie erhalten weiterhin das gleiche Ergebnis.
pcarvalho
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.