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
typeset
ideclare
? - 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
.typeset
jest uważane za przestarzałe?