2010-12-11 9 views
28

Al escribir variables en Bash, ¿cuál es la diferencia entre declare y typeset? Cuando se usa dentro de una función: ¿cuál es la diferencia entre declare y typeset y local?Diferencias entre declarar, tipografiar y variable local en Bash

La única diferencia que me he encontrado es que el tipo de letra es portátil para las secuencias de comandos ksh. Aparte de eso, ¿hay alguna razón por la cual uno debe ser preferido sobre el otro?

ACTUALIZACIÓN: Agregó local a la pregunta.

+0

similar a [esta cuestión] (http://stackoverflow.com/q/30362831/471376). – JamesThomasMoon1979

Respuesta

8

En lo que se refiere a bash, no, no hay diferencia. De hecho, la página de manual ha ellos comparten la misma definición

declarar [-aAfFilrtux] [-p] [nombre [= valor] ...]
compuesto tipo [-aAfFilrtux] [-p] [nombre [= value] ...]
declarar variables y/o darles atributos. Si no se dan nombres , entonces se muestran los valores de las variables . La opción -p mostrará los atributos y valores de cada nombre ...

También encontré this little tidbit que demuestren aún más mi reclamo, así como la portabilidad ksh usted ha mencionado.

El declarar o builtins compuestas tipo, que son sinónimos exactos, permiten modificar las propiedades de variables. Esta es una forma muy débil de escribir [1] disponible en ciertos lenguajes de programación . El comando declare es específico para la versión 2 o posterior de Bash. El comando typeset también funciona en scripts ksh.

+8

"help typeset" me dice que está obsoleto. Obsoleto a favor de "declarar". – lecodesportif

+0

este es un buen ejemplo de los problemas en la documentación bash y hay inconsistencia con la ayuda de línea de comandos (usando el comando 'ayuda') y las páginas del manual (usando 'man bash' y yendo a SHELL BUILTINS) y la página incorporada (usando 'man builtins'). También hay algunos errores tipográficos allí, así que tenga cuidado – osirisgothra

3

En el manual de Bash en la sección 4.2 Bash Builtin Commands se afirma:

'componer'
composición tipográfica [-afFrxi] [-p] [NOMBRE [= VALOR] ...]
El ' el comando typeset 'se proporciona para la compatibilidad con el shell Korn ; sin embargo, ha quedado en desuso en favor del comando incorporado 'declarar' .

15
  • Diferencia entre typeset y declare:

el primero es más portátil (por ejemplo ksh.), Mientras que el último es más preferible cuando la portabilidad no es una preocupación.

  • Diferencia entre declare (o typeset) y local cuando se utiliza dentro de una función:

El primero implica la última, pero más potente. Por ejemplo, declare -i x hace x tienen el atributo integer, declare -r x hace x de sólo lectura, etc.

+12

'local' y' declare' son en su mayoría idénticos y toman todos los mismos argumentos con dos excepciones: local fallará si no se usa dentro de una función y local sin filtros de args enviados a imprime solo locales, declara no. – ormaaj

+0

@ormaaj tienes razón, no me di cuenta de que 'local' también admite opciones. Muchas gracias. –