Kan iemand het verschil tussen declareren en gezet verklaren met voorbeelden uit het echte leven.
Antwoord
In bash
, typeset
en declare
zijn precies hetzelfde. Het enige verschil is dat typeset
als verouderd wordt beschouwd.
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ... Set variable values and attributes. Obsolete. See `help declare".
De man-pagina vermeldt ze zelfs in één adem:
declare [-aAfFgilrtux] [-p] [name[=value] ...] typeset [-aAfFgilrtux] [-p] [name[=value] ...] Declare variables and/or give them attributes.
typeset
is draagbaar naar sommige andere shells, bijvoorbeeld ksh93
. Als je naar cross-shell portabiliteit streeft, gebruik dan typeset
(en zorg ervoor dat de manier waarop je het noemt draagbaar is). Als dergelijke overdraagbaarheid u niets kan schelen, gebruik dan declare
.
Reacties
Antwoord
Ik ken een geval waarin declare
nuttig is om de kwaadaardige eval
: variabele indirecte te vermijden :
$ var=foo $ x=var $ declare "$x=another_value" $ echo $var another_value
Opmerkingen
- Dit is een leuke opmerking, maar hoe beantwoordt dat de vraag die is ab out
typeset
endeclare
? - Dit is al goed beantwoord door Chris Down, mijn antwoord is slechts een geval waarin het ' s nuttig
- Misschien was ik ' niet duidelijk. Opmerkingen moeten opmerkingen zijn en antwoorden moeten antwoorden zijn. Dit is een opmerking, geen antwoord.
- Mijn fragment zou niet ' niet worden gewist in een opmerking
- maar je kunt nog steeds variabelen toewijzen aan typeset … vervang gewoon declareren door typeset en je krijgt nog steeds hetzelfde resultaat.
help typeset
, niet inman typeset
.typeset
als verouderd wordt beschouwd?