Bash declare comando incorporado

declarar comando

En Tipo Unix sistemas operativos, declare es un comando incorporado del Intento cáscara . Eso declara cáscara variables y funciones , establece sus atributos y muestra sus valores .

Descripción

En bash, las variables pueden tener un valor (como el número 3 ). Opcionalmente, a las variables también se les pueden asignar atributos (como entero ).



Por ejemplo, una variable de 'solo lectura' ( declarar -r ) no se puede desarmar y su valor y otros atributos no se pueden modificar. Una variable de 'matriz indexada' ( declare -a ) es un formación de valores que están indexados por número, comenzando en cero. Una variable de 'matriz asociativa' ( declare -A ) es una matriz de pares clave-valor cuyos valores están indexados por una palabra clave. (Para más información, ver matrices en bash ).

Además de las variables, a las funciones bash se les pueden asignar atributos que afectan su comportamiento. Ver el -F y -F opciones a continuación para obtener más información.

Nota

La componer comando es un alias para declare . Los dos se pueden usar indistintamente en bash.



Sintaxis

|_+_|

Opciones

La declare El comando incorporado toma las siguientes opciones generales:

Opción Descripción
-F Todos los nombres se tratan como nombres de funciones, no variables.
-F Cuando muestre información sobre una función, muestre solo el nombre y los atributos de la función. No muestre el contenido de la función.
-gramo Cuándo declare se utiliza dentro de una función de shell, el -gramo La opción hace que todas las operaciones sobre variables surtan efecto en el ámbito global. Si no se usa en una función de shell, -gramo no tiene efecto.
-pag Cuando se usa con nombre argumentos, -pag muestra las opciones y atributos de cada variable nombre , y -F o -F se ignoran (las funciones no se describen).

Cuando se usa con opciones, pero sin nombres, -pag muestra los atributos y valores, que coinciden con las otras opciones especificadas, de todas las variables y funciones.

Cuando se usa sin opciones ni nombres, -pag muestra los atributos y valores de todas las variables y funciones, o solo funciona si -F está especificado.

Las opciones restantes, que se enumeran a continuación, causan declare para establecer un atributo si la letra de la opción está precedida por un guión. Si va precedido de un signo más, declare anulará el atributo en su lugar.

Opción Desarmado con Descripción
-a Declare los elementos nombrados como matrices indexadas. Este atributo no se puede desarmar.
-A Declare los elementos nombrados como matrices asociativas. Este atributo no se puede desarmar.
-I + yo Dé a los elementos nombrados el entero atributo. Los valores asignados a la variable estarán restringidos a valores enteros. Si se asigna un valor no entero, se informa un error o el valor 0 (cero) se asigna en su lugar.

Si el valor asignado es un cuerda que representa una operación aritmética en números enteros (como ' 5+5 '), se asigna el resultado de la operación. Si el resultado de la operación no es un número entero, se asigna el piso entero (por ejemplo, ' 22/7 'asigna 3 ). Es posible que no se utilicen valores de coma flotante y, de ser así, se informará un error. Bash no admite operaciones matemáticas de coma flotante.
-l + l Cuando se asigna un valor a la variable nombrada, convierta todos mayúsculas cartas a minúscula . Si la mayúscula ( -u ) se estableció previamente para la variable, el atributo no está establecido.
-norte + n Dar cada uno nombre la nameref atributo, convirtiéndolo en una 'referencia de nombre' a otra variable. La variable referenciada se define por el valor de nombre . Todas las referencias, asignaciones y modificaciones de atributos a nombre , excepto aquellos que usan o cambian el nameref atributo, se realizan en la variable referenciada por el valor de nombre . En otras palabras, convierte la variable en un puntero a otra variable.

La nameref El atributo no se puede aplicar a matrices.
-r + r Haga que los elementos nombrados sean de solo lectura. Posteriormente, no se les puede asignar valores ni desarmar.
-t + t Dale a cada artículo nombrado el rastro atributo. Si el elemento es una función, heredará la DEPURAR y REGRESO trampas del shell padre. Si el elemento es una variable, el rastro El atributo no tiene ningún efecto.
-u + u Cuando se asigna un valor a la variable nombrada, las letras minúsculas se convierten a mayúsculas. Si la minúscula ( -l ) se estableció previamente para la variable, el atributo no está establecido.
-x +x Marque los elementos con nombre para exportarlos a procesos secundarios, como si el exportar Se ha utilizado el comando incorporado.

Alcance léxico

Cuándo declare se utiliza dentro de una función de shell, todos los elementos con nombre se declaran en un ámbito local, a menos que el -gramo se utiliza la opción. Este comportamiento es el mismo que usar el local comando incorporado.



Estado de salida

El estado de salida de declare es correcto (cero), a menos que se especifique una opción no válida o se produzca un error, en cuyo caso el estado es fallo (distinto de cero).

Ejemplos de

Declarar y enumerar variables

|_+_|

Enumere todas las variables declaradas, sus atributos y sus valores.

|_+_|

Declarar una variable, myvar y no le asigne ningún valor. Ahora ejecute el primer comando nuevamente:

|_+_|

Esta vez, observe en la salida que myvar aparece después de todas las demás variables como:

|_+_|

El guión doble es equivalente a 'sin opciones'. Esto significa que myvar se declara y no tiene atributos. Si tuviera un valor asignado, el valor se enumeraría aquí.

|_+_|

Asignar el valor 33 a myvar .

|_+_|

Igual que el comando anterior.

cómo probar si su disco duro está fallando
|_+_|

Igual que los dos comandos anteriores.

|_+_|

Igual que los tres comandos anteriores; esta es la forma correcta, incluido el valor entre comillas dobles. Sin embargo, cualquiera de los cuatro comandos anteriores tiene el mismo efecto.

Ahora, enumere todas las variables nuevamente:

|_+_|

Verá que esta vez, la salida enumera myvar con su asignación de valor:

|_+_|

La clave para notar aquí es, cuando corres declarar -p , las variables se enumeran como el completo declare comando y debe establecer la variable en sus atributos y valor actuales.

Armado y desarmado de atributos

Los siguientes comandos modifican los atributos de la variable:

|_+_|

Declarar que myvar debe exportarse a cualquier proceso de shell hijo. Este es el equivalente a usar el exportar mando:

|_+_|

Ahora, enumere las declaraciones de variables:

|_+_|

Observe que en la salida, el guión doble (sin opciones) ha sido reemplazado por -x :

|_+_|

Para eliminar el atributo de exportación, use +x en lugar de:

|_+_|

Después de ejecutar el comando anterior, myvar ya no se exportará a procesos de subshell.

Enteros y evaluación de enteros

Bash te permite declarar una variable para tener el entero atributo, que garantiza que la variable siempre tenga un valor entero. También permite la evaluación aritmética al asignar un valor.

|_+_|

Declarar que myvar debe tratarse como un número entero.

|_+_|

La cuerda ' prueba 'es un valor no entero, por lo que el valor 0 (cero) se asigna en su lugar. Puede verificar esto si echo el valor:

cómo saber si mi computadora es de 32 bits o de 64 bits
|_+_| |_+_|

Sin embargo, se puede asignar cualquier valor entero positivo o negativo. (El valor máximo posible depende de su computadora, pero es enorme):

|_+_| |_+_|

Si se asigna una cadena que contiene una operación aritmética a una variable entera, se asigna el resultado de la operación. Por ejemplo:

|_+_| |_+_|

El comando anterior asigna myvar El valor de 2 veces 11 .

Si la operación matemática da como resultado un número con un punto decimal, el resultado se redondea hacia abajo al siguiente entero más bajo. Por ejemplo:

|_+_| |_+_|

El resultado exacto de 33 dividido por 5 ( 33/5 ) es 6.6 , pero bash lo redondea al número entero 6 .

Si intenta usar valores decimales como operandos, bash devuelve un error, indicando que el punto decimal es desconocido operador :

|_+_| |_+_|

Para desarmar el atributo entero, use la opción + yo :

|_+_|

Ahora, myvar ya no tiene el entero atributo. Las cadenas que contienen operaciones matemáticas se asignan a myvar literalmente , en lugar de evaluarse. Por ejemplo:

|_+_| |_+_|

Matrices indexadas

Para declarar una matriz indexada, use -a :

|_+_|

Si myvar ya tenía un valor asignado, este valor se indexa como el primer elemento, numerado cero:

|_+_| |_+_|

Ahora puede asignar valores a elementos de la matriz. myvar usando enteros como índices:

descargar 32 bits o 64 bits
|_+_| |_+_|

Se puede acceder a los elementos por número de índice utilizando la siguiente sintaxis:

|_+_| |_+_|

Si usa un número entero negativo como índice, bash cuenta desde el último elemento, en lugar del primero. Para acceder al último elemento, use index -1 :

|_+_| |_+_|

Un índice de -2 accedería al penúltimo elemento de la matriz, etc .:

|_+_| |_+_|

Para mostrar todos los elementos de una matriz, puede utilizar un asterisco (' * ') como índice. Los elementos individuales se separan con un espacio:

echo $ {myvar [*]}

|_+_|Nota

No puede desarmar el atributo de matriz con +a . Bash no tiene ningún procedimiento para convertir una matriz a otro tipo, por lo que devuelve un error, incluso si no se asignaron valores. Por ejemplo:

|_+_| |_+_|

Compruebe si se declara una variable

Si está escribiendo un script bash y necesita verificar si se declara una variable, esta es la forma correcta de hacerlo:

|_+_|

Este script realiza Expansión del parámetro 'Asignar valor alternativo' , que prueba si myvar se ha establecido, y si su valor es nulo. Si myvar está desarmado, se hará eco ' no establecido '. De lo contrario, se hará eco ' colocar '. Tenga en cuenta que la letra x puede ser cualquier cosa que desee, pero es necesario para que se produzca la comparación.

exportar - Marcar variables y funciones para exportar a procesos secundarios.