Jaka jest różnica między deklarowaniem a składem


22

Czy ktoś może wyjaśnić różnicę między deklarowaniem a składem za pomocą przykładów z prawdziwego życia.

Odpowiedzi:


27

W bash, typeseti declaresą dokładnie takie same. Jedyna różnica polega na tym, że typesetuważa się ją za przestarzałą.

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

    Obsolete.  See `help declare'.

Strona podręcznika wyświetla je nawet w tym samym oddechu:

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

typesetjest przenośny dla niektórych innych powłok, na przykład ksh93. Jeśli dążysz do przenośności między powłokami, użyj typeset(i upewnij się, że sposób, w jaki go wywołujesz, jest przenośny). Jeśli nie zależy Ci na takiej przenośności, użyj declare.


czy możesz podać przykład, gdzie i dlaczego to użycie w skrypcie bash
Rahul Patil

1
... jak powiedziałem, są dokładnie takie same. Nie rozumiem, jak je odróżnić, jeśli tak jest.
Chris Down,

2
Dobry. Pamiętaj, że „przestarzałe” pojawia się tylko w help typeset, a nie w man typeset.
fedorqui

2
@ChrisDown, nie wiesz, dlaczego dokładnie typesetjest uważany za przestarzały?
Alexej Magura

3

Znam przypadek, w którym declareprzydatne jest uniknięcie zła eval: pośrednia zmienność :

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

To miły komentarz, ale jak to odpowiada na pytanie, które dotyczy typeseti declare?
jw013,

To już dobrze odpowiedział Chris Down, moja odpowiedź to tylko przypadek, w którym jest to przydatne
Gilles Quenot

Być może nie byłem jasny. Komentarze powinny być komentarzami, a odpowiedzi powinny być odpowiedziami. To jest komentarz, a nie odpowiedź.
jw013,

3
Mój fragment nie skasuje się w komentarzu
Gilles Quenot,

ale nadal możesz przypisywać zmienne składem ... po prostu zastąp deklaruj składnią i nadal otrzymujesz ten sam wynik.
pcarvalho
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.