Qual è la differenza tra dichiarare e comporre


22

Qualcuno può spiegare la differenza tra dichiarare e comporre con esempi di vita reale.

Risposte:


27

In bash, typesete declaresono esattamente gli stessi. L'unica differenza è che typesetè considerato obsoleto.

typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.

La pagina man li elenca anche nello stesso respiro:

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

typesetè portatile per alcune altre shell, ad esempio ksh93. Se stai mirando alla portabilità cross-shell, usa typeset(e assicurati che il modo in cui lo chiami sia portatile). Se non ti interessa tale portabilità, usa declare.


puoi per favore fornire qualche esempio di dove e perché questo uso nello script bash
Rahul Patil,

1
... come ho detto, sono esattamente gli stessi. Non capisco come posso differenziarli se sono così.
Chris Down,

2
Buona Si noti che "obsoleto" appare solo in help typeset, non in man typeset.
fedorqui,

2
@ChrisDown, non capiresti perché, esattamente, typesetè considerato obsoleto?
Alexej Magura,

3

Conosco un caso in cui declareè utile evitare il male eval: indiretta variabile :

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

Questo è un bel commento ma come risponde alla domanda che riguarda typesete declare?
jw013,

Chris Down risponde già bene, la mia risposta è solo un caso in cui è utile
Gilles Quenot,

Forse non ero chiaro. I commenti dovrebbero essere commenti e le risposte dovrebbero essere risposte. Questo è un commento, non una risposta.
jw013,

3
Il mio frammento non verrebbe cancellato in un commento
Gilles Quenot,

ma puoi ancora assegnare variabili con il set di tipi ... basta sostituire dichlare con il set e otterrai comunque lo stesso risultato.
pcarvalho,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.