Wat is het verschil tussen declareren en zetten

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

  • kunt u alstublieft geef een voorbeeld van waar en waarom dit gebruik in bash-script
  • … zoals ik al zei, ze zijn precies hetzelfde. Ik begrijp niet ' hoe ik kunnen ze onderscheiden als ze dat zijn.
  • Goed. Merk op dat " verouderd " alleen verschijnt in help typeset, niet in man typeset.
  • @ChrisDown, je zou niet ' weet je toevallig waarom typeset als verouderd wordt beschouwd?

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 en declare?
  • 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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *