¿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?

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.


¿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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.