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