¿Cuál es la diferencia entre declare y typeset?

22

¿Alguien puede explicar la diferencia entre declarar y componer con ejemplos de la vida real?

Rahul Patil
fuente

Respuestas:

27

En bash, typesety declareson exactamente lo mismo. La única diferencia es que typesetse considera obsoleto.

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

    Obsolete.  See `help declare'.

La página man incluso los enumera en el mismo aliento:

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

typesetes portátil a otras conchas, por ejemplo ksh93,. Si tiene como objetivo la portabilidad cross-shell, use typeset(y asegúrese de que la forma en que lo llama sea portátil). Si no te importa esa portabilidad, úsala declare.

Chris Down
fuente
¿podría dar algún ejemplo de dónde y por qué este uso en script bash?
Rahul Patil
1
... como dije, son exactamente lo mismo. No entiendo cómo puedo diferenciarlos si es así.
Chris Down
2
Bueno Tenga en cuenta que "obsoleto" solo aparece en help typeset, no en man typeset.
fedorqui
2
@ChrisDown, ¿no sabrías por qué, exactamente, typesetse considera obsoleto?
Alexej Magura
3

Conozco un caso donde declarees útil para evitar el mal eval: indirección variable :

$ var=foo
$ x=var
$ declare "$x=another_value"
$ echo $var
another_value
Gilles Quenot
fuente
Este es un buen comentario, pero ¿cómo responde eso a la pregunta sobre qué es typesety declare?
jw013
Esto ya está bien respondido por Chris Down, mi respuesta es solo un caso en el que es útil
Gilles Quenot
Quizás no estaba claro. Los comentarios deben ser comentarios y las respuestas deben ser respuestas. Este es un comentario, no una respuesta.
jw013
3
Mi fragmento no se despejaría en un comentario
Gilles Quenot
pero aún puede asignar variables con tipografía ... simplemente reemplace declarar con tipografía y aún obtendrá el mismo resultado.
pcarvalho