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
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
typesetideclare? - 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.
help typeset, nie wman typeset.typesetjest uważane za przestarzałe?