Jaka jest różnica między deklarowaniem i składaniem

Czy ktoś może wyjaśnić różnicę między deklarowaniem a składaniem na podstawie przykładów z życia wziętych.

Odpowiedź

W bash, typeset i declare są dokładnie takie same. Jedyna różnica polega na tym, że typeset jest uważane za przestarzałe.

 typeset: typeset [-aAfFgilrtux] [-p] name[=value] ... Set variable values and attributes. Obsolete. See `help declare".  

Strona podręcznika zawiera je nawet jednym tchem:

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

typeset jest przenośny do niektórych innych powłok, na przykład ksh93. Jeśli zależy Ci na przenośności między powłokami, użyj typeset (i upewnij się, że sposób wywoływania jest przenośny). Jeśli nie obchodzi Cię taka przenośność, użyj declare.

Komentarze

  • czy możesz podać przykład, gdzie i dlaczego to użycie w skrypcie basha
  • … tak jak powiedziałem, są dokładnie takie same. Nie ' nie rozumiem, może je rozróżnić, jeśli tak jest.
  • Dobrze. Zauważ, że " przestarzałe " pojawia się tylko w help typeset, nie w man typeset.
  • @ChrisDown, nie ' nie wiesz, dlaczego dokładnie typeset jest uważane za przestarzałe?

Odpowiedź

Znam przypadek, w którym declare jest przydatne, aby uniknąć zła eval: zmienna pośrednia :

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

Komentarze

  • To miły komentarz, ale jak odpowiada na pytanie, ab out typeset i declare?
  • Dobrze odpowiedział na to Chris Down, moja odpowiedź to tylko przypadek, w którym to ' jest przydatne
  • Być może nie ' nie było jasne. Komentarze powinny być komentarzami, a odpowiedzi – odpowiedziami. To jest komentarz, a nie odpowiedź.
  • Mój fragment nie byłby ' t wyraźny w komentarzu
  • , ale nadal możesz przypisywać zmienne za pomocą typeset … po prostu zamień deklarację na typeset i nadal otrzymujesz ten sam wynik.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *