En bash scripting:
creamos variable con solo nombrarla:
abc=ok
o podemos usar declare
declare abc=ok
¿cual es la diferencia?
¿Y por qué bash hace tantas formas de crear una variable?
bash
shell-script
variable
primavera amorosa
fuente
fuente
declare
hace que los NAME sean locales, como con ellocal
comando. La-g
opción suprime este comportamiento. Verhelp declare
.declare
permite crear matrices asociativas, enteros y variables de solo lectura. Además, expande sus argumentos, por lo que cosas comodeclare $name=1
son posibles.Respuestas:
De
help -m declare
:Por lo tanto,
declare
se utiliza para establecer valores y atributos variables .Permítanme mostrar el uso de dos atributos con un ejemplo muy simple:
¡Del ejemplo anterior, creo que deberías entender el uso de la
declare
variable sobre la variable normal! Este tipo dedeclare
acción es útil en funciones, bucles con secuencias de comandos.Visite también Variables de escritura: declarar o componer
fuente
abc=ok
asigna un valor a la variableabc
.declare abc
declara una variable llamadaabc
. Los dos se pueden combinar comodeclare abc=ok
.En bash, como otros shells, las variables de cadena y matriz no necesitan ser declaradas, por
declare
lo que no es necesario a menos que desee pasar opciones, por ejemplo,declare -A abc
para hacerabc
una matriz asociativa odeclare -r
para hacer una variable de solo lectura. Sin embargo, dentro de una función,declare
hace una diferencia: hace que la variable sea local a la función, lo que significa que el valor de la variable fuera de la función (si existe) se conserva. (A menos que utilicedeclare -g
, lo que hace que la variable no sea local; esto es útil cuando se combina con otras opciones, por ejemplo,declare -gA
para crear una matriz asociativa global en una función). Ejemplo:Salida:
Otra cosa que puedes hacer con el
declare
incorporado esEl
declare
incorporado es exclusivo de bash. Está fuertemente inspirado y muy cerca de latypeset
construcción de ksh , y bash proporcionatypeset
como sinónimo dedeclare
compatibilidad. (No sé por qué bash no solo lo llamótypeset
). Hay una tercera sinonimo,local
. También hayexport
, que es lo mismo quedeclare -x
, de nuevo por compatibilidad (con cada shell de estilo Bourne).fuente
export
,local
ydeclare
es el más compatible con otros proyectiles?export
existe en todas las variantes desh
.local
existe solo en bash y zsh,declare
solo en bash.typeset
existe en ksh, bash y zsh.