TEMA
about_assignment_operators
DESCRIPCIÓN BREVE
Describe cómo utilizar operadores para asignar valores a las
variables.
DESCRIPCIÓN DETALLADA
Los operadores de asignación asignan uno o más valores a una variable.
Pueden realizar operaciones numéricas con los valores antes de la
asignación.
Windows PowerShell admite los siguientes operadores de asignación.
Operador Descripción
------- -----------
= Establece el valor de una variable en el valor especificado.
+= Aumenta el valor de una variable en el valor
especificado o anexa el valor especificado al valor existente.
-= Disminuye el valor de una variable en el valor especificado.
*= Multiplica el valor de una variable por el valor
especificado o anexa el valor especificado al valor existente.
/= Divide el valor de una variable por el valor especificado.
%= Divide el valor de una variable por el valor
especificado y, a continuación, asigna el resto (módulo) a la
variable.
++ Aumenta en 1 el valor de una variable, una propiedad
asignable o un elemento de matriz.
-- Disminuye en 1 el valor de una variable, una propiedad
asignable o un elemento de matriz.
SINTAXIS
Esta es la sintaxis de los operadores de asignación:
<expresión-asignable> <operador-de-asignación> <valor>
Las expresiones asignables incluyen variables y propiedades. El
valor puede ser un valor único, una matriz de valores, un comando, una
expresión o una instrucción.
Los operadores de decremento e incremento son operadores unarios.
Cada uno de ellos presenta versiones de prefijo y postfijo.
<expresión-asignable><operador>
<operador><expresión-asignable>
La expresión asignable debe un número o debe ser convertible a un
número.
ASIGNAR VALORES
Las variables son espacios de memoria con nombre que almacenan
valores. Los valores se almacenan en variables mediante el operador de
asignación (=). Se puede hacer que el nuevo valor sustituya al valor
existente de la variable o bien anexar un valor nuevo al existente.
El operador de asignación básico es el signo igual (=) (ASCII 61). Por
ejemplo, la instrucción siguiente asigna el valor Windows PowerShell a la
variable $MyShell:
$MyShell = "Windows PowerShell"
Al asignar un valor a una variable en Windows PowerShell, se crea la
variable si todavía no existe. Por ejemplo, la primera de las dos
instrucciones de asignación siguientes crea la variable $a y le
asigna el valor 6. La segunda instrucción de asignación asigna el
valor 12 a $a. La primera instrucción crea una nueva variable.
La segunda instrucción solamente cambia su valor:
$a = 6
$a = 12
En Windows PowerShell, las variables no tienen un tipo de datos
específico a no ser que se conviertan. Cuando una variable
contiene un solo objeto, toma el tipo de datos de ese objeto. Cuando
contiene una colección de objetos, la variable tiene el tipo de datos
System.Object. Por consiguiente, se puede asignar cualquier tipo de
objeto a la colección. En el ejemplo siguiente se muestra que es
posible agregar objetos de proceso, objetos de servicio, cadenas y
enteros a una variable sin generar un error:
$a = get-process
$a += get-service
$a += "cadena"
$a += 12
Dado que el operador de asignación (=) tiene una precedencia
menor que el operador de canalización (|), no es necesario usar
paréntesis para asignar el resultado de una canalización de
comandos a una variable. Por ejemplo, el comando siguiente ordena los
servicios en el equipo y, a continuación, asigna los servicios
ordenados la variable $a:
$a = get-service | sort name
También se puede asignar a una variable el valor creado por una
instrucción, como en el ejemplo siguiente:
$a = if ($b -lt 0) { 0 } else { $b }
En este ejemplo se asigna 0 a la variable $a si el valor de $b es
menor que 0. Se asigna a $a el valor de $b si el valor de $b no
es menor que cero.
OPERADOR DE ASIGNACIÓN (=)
El operador de asignación (=) asigna valores a las variables. Si
la variable ya tiene un valor, el operador de asignación (=)
reemplaza el valor sin generar ninguna advertencia.
La instrucción siguiente asigna el valor entero 6 a la variable $a:
$a = 6
Para asignar un valor de cadena a una variable, el valor debe
escribirse entre comillas dobles, como se muestra a continuación:
$a = "fútbol"
Para asignar una matriz (varios valores) a una variable, se
separan los valores con comas, como sigue:
$a = "manzana", "naranja", "limón", "uva"
Para asignar una tabla hash a una variable, se utiliza la
notación de tabla hash estándar en Windows PowerShell. Se escribe
un símbolo de arroba (@) seguido por pares de clave/valor
separados por signos de punto y coma (;), todos ellos entre
llaves ({}). Por ejemplo, para asignar una tabla hash a la
variable $a, escriba:
$a = @{uno=1; dos=2; tres=3}
Para asignar valores hexadecimales a una variable, el valor debe ir
precedido de "0x". Windows PowerShell convierte el valor hexadecimal
(0x10) en un valor decimal (en este caso, 16) y asigna ese valor a la
variable $a. Por ejemplo, para asignar el valor 0x10 a la variable
$a, escriba:
$a = 0x10
Para asignar un valor exponencial a una variable, se escribe el
número raíz, luego la letra "e" y, a continuación, un número que
representa un múltiplo de 10. Por ejemplo, para asignar a la
variable $a el valor 3,1415 elevado a una potencia de 1.000, escriba:
$a = 3.1415e3
Windows PowerShell también puede convertir kilobytes (KB),
megabytes (MB) y gigabytes (GB) en bytes. Por ejemplo, para
asignar el valor 10 kilobytes a la variable $a, escriba:
$a = 10kb
ASIGNACIÓN MEDIANTE EL OPERADOR DE ADICIÓN (+=)
La asignación mediante el operador de adición (+=) incrementa el
valor de una variable o bien anexa el valor especificado al valor
existente. La acción depende de si el tipo de la variable es
numérico o de cadena, y de si la variable contiene un solo valor
(un escalar) o varios (una colección).
El operador += combina dos operaciones. En primer lugar, suma y, a
continuación, asigna. Por consiguiente, las instrucciones siguientes son
equivalentes:
$a += 2
$a = ($a + 2)
Cuando la variable contiene un solo valor numérico, el operador +=
incrementa el valor existente en la cantidad especificada en el lado
derecho del operador. A continuación, el operador asigna el valor
resultante a la variable.
En el ejemplo siguiente se muestra cómo utilizar el operador += para
aumentar el valor de una variable:
C:\PS> $a = 4
C:\PS> $a += 2
C:\PS> $a
6
Cuando el valor de la variable es de cadena, se anexa a la cadena
el valor que figura a la derecha del operador, como sigue:
C:\PS> $a = "Windows"
C:\PS> $a +- " PowerShell"
C:\PS> $a
Windows PowerShell
Cuando el valor de la variable es una matriz, el operador +=
anexa a la matriz los valores que figuran en el lado derecho del
operador. A menos que se establezca explícitamente el tipo de la
matriz mediante una conversión, se puede anexar cualquier tipo de
valor a la matriz, como sigue:
C:\PS> $a = 1,2,3
C:\PS> $a += 2
C:\PS> $a
1
2
3
2
C:\PS> $a += "Cadena"
C:\PS> $a
1
2
3
2
Cadena
Cuando el valor de una variable es una tabla hash, el operador +=
anexa a la tabla hash el valor que figura en el lado derecho del
operador. Sin embargo, dado que el único tipo que se puede
agregar a una tabla hash es otra tabla hash, todas las demás
asignaciones producen un error.
Por ejemplo, el comando siguiente asigna una tabla hash la variable $a.
A continuación, se utiliza el operador += para anexar otra tabla
hash a la tabla hash existente, de tal forma que, en realidad, se
agrega un nuevo par de clave/valor a la tabla hash existente.
Este comando se ejecuta correctamente, como se muestra en el resultado:
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += @{mode = "write"}
C:\PS> $a
Nombre Valor
---- -----
a 1
b 2
mode write
c 3
El comando siguiente intenta anexar un entero (1) a la tabla hash
en la variable $a. Se produce un error en este comando:
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += 1
Solo se puede agregar una tabla de hash a otra tabla de hash.
En línea:1 carácter:6
+ $a += <<<< 1
ASIGNACIÓN MEDIANTE EL OPERADOR DE SUSTRACCIÓN (-=)
El operador de asignación por sustracción (-=) disminuye el valor
de una variable en el valor especificado en el lado derecho del
operador.
Este operador no se puede utilizar con variables de cadena ni
para quitar un elemento de una colección.
El operador -= combina dos operaciones. En primer lugar, resta y, a
continuación, asigna. Por consiguiente, las instrucciones siguientes son
equivalentes:
$a -= 2
$a = ($a - 2)
En el ejemplo siguiente se muestra cómo utilizar el operador -= para
disminuir el valor de una variable:
C:\PS> $a = 8
C:\PS> $a -= 2
C:\PS> $a
6
También se puede utilizar el operador -= de asignación para
disminuir el valor de un miembro de una matriz numérica. Para
ello, se debe especificar el índice del elemento de matriz que se
desea modificar. En el ejemplo siguiente, se reduce en 1 el valor
del tercer elemento de una matriz (elemento 2):
C:\PS> $a = 1,2,3
C:\PS> $a[2] -= 1.
C:\PS> $a
1
2
2
No se puede utilizar el operador -= para eliminar valores de una
variable. Para eliminar todos los valores que están asignados a
una variable, se utilizan los cmdlets Clear-Item o Clear-Variable para
asignar el valor $null o "" a la variable.
$a = $null
Para eliminar un valor determinado de una matriz, se utiliza la
notación de matriz para asignar el valor $null al elemento de que
se trate. Por ejemplo, la instrucción siguiente elimina el
segundo valor (posición de índice 1) de una matriz:
C:\PS> $a = 1,2,3
C:\PS> $a
1
2
3
C:\PS> $a[1] = $null
C:\PS> $a
1
3
Para eliminar una variable se utiliza el cmdlet Remove-Variable.
Este método resulta útil cuando la variable se ha convertido
explícitamente a un tipo de datos determinado y desea una
variable sin tipo. El comando siguiente elimina la variable $a:
remove-variable a
ASIGNACIÓN MEDIANTE EL OPERADOR DE MULTIPLICACIÓN (*=) La
asignación mediante el operador de multiplicación (*=) multiplica
un valor numérico o anexa a una variable el número especificado de
copias del valor de cadena.
Cuando una variable contiene un solo valor numérico, ese valor se
multiplica por el valor que figura en el lado derecho del
operador. Por ejemplo, en el ejemplo siguiente se muestra cómo
utilizar el operador *= para multiplicar el valor de una variable:
C:\PS> $a = 3
C:\PS> $a *= 4
C:\PS> $a
12
En este caso, el operador *= combina dos operaciones. En primer lugar,
multiplica y, a continuación, asigna. Por consiguiente, las instrucciones
siguientes son equivalentes:
$a *= 2
$a = ($a * 2)
Cuando una variable contiene un valor de cadena, Windows PowerShell anexa
al valor el número especificado de cadenas, como sigue:
C:\PS> $a = "archivo"
C:\PS> $a *= 4
C:\PS> $a
archivoarchivoarchivoarchivo
Para multiplicar un elemento de una matriz, se utiliza un índice para
identificar el elemento que desea multiplicar. Por ejemplo, el
comando siguiente multiplica el primer elemento de la matriz
(posición de índice 0) por 2:
$a[0] *= 2
ASIGNACIÓN MEDIANTE EL OPERADOR DE DIVISIÓN (/=)
La asignación mediante el operador de división (/=) divide un
valor numérico por el valor que se especifica en el lado derecho del
operador. Este operador no se puede usar con variables de cadena.
El operador /= combina dos operaciones. Primero, divide y, a
continuación, asigna. Por consiguiente, las dos instrucciones
siguientes son equivalentes:
$a /= 2
$a = ($a / 2)
Por ejemplo, el comando siguiente utiliza el operador /= para
dividir el valor de una variable:
C:\PS> $a = 8
C:\PS> $a /=2
C:\PS> $a
4
Para dividir un elemento de una matriz, se debe utilizar un
índice para identificar el elemento que se desea modificar. Por
ejemplo, el comando siguiente divide el segundo elemento de la matriz
(posición de índice 1) por 2:
$a[1] /= 2
ASIGNACIÓN MEDIANTE EL OPERADOR DE MÓDULO (%=)
El operador de asignación por módulo (%=) divide el valor de una
variable por el valor especificado en el lado derecho del operador.
A continuación, el operador %= asigna a la variable el resto
(denominado módulo). Este operador únicamente se puede utilizar cuando
la variable contiene un solo valor numérico. No se puede utilizar si la
variable contiene una variable de cadena o una matriz.
El operador %= combina dos operaciones. En primer lugar, divide y
determina el resto y, a continuación, asigna el resto a la
variable. Por consiguiente, las instrucciones siguientes son
equivalentes:
$a %= 2
$a = ($a % 2)
En el ejemplo siguiente se muestra cómo utilizar el operador %=
para guardar el módulo de un cociente:
C:\PS> $a = 7
C:\PS> $a %= 4
C:\PS> $a
3
OPERADORES DE DECREMENTO E INCREMENTO
El operador de incremento (++) aumenta el valor de una variable
en 1. Cuando se utiliza al operador de incremento en una
instrucción simple, no se devuelve ningún valor.
Para ver el resultado, debe mostrarse el valor de la variable,
como sigue:
C:\PS> $a = 7
C:\PS> ++$a
C:\PS> $a
8
Para forzar la devolución de un valor, debe incluirse la variable y el
operador entre paréntesis, como sigue:
C:\PS> $a = 7
C:\PS> (++$a)
8
El operador de incremento se puede colocar antes (prefijo) o después
(postfijo) de una variable. La versión de prefijo del operador
incrementa la variable antes de que su valor se utilice en la
instrucción, como sigue:
C:\PS> $a = 7
C:\PS> $c = ++$a
C:\PS> $a
8
C:\PS> $c
8
La versión de postfijo del operador incrementa la variable
después de haber utilizado su valor en la instrucción. En el ejemplo
siguiente, las variables $c y $a tienen valores diferentes porque el
valor se asigna a $c antes de que cambie $a:
C:\PS> $a = 7
C:\PS> $c = $a++
C:\PS> $a
8
C:\PS> $c
7
El operador de decremento (--) disminuye el valor de una variable
en 1. Al igual que sucede con el operador de incremento, no se
devuelve ningún valor cuando se utiliza el operador en una instrucción
simple. Para devolver un valor, se utilizan paréntesis, como sigue:
C:\PS> $a = 7
C:\PS> --$a
C:\PS> $a
6
C:\PS> (--$a)
5
La versión de prefijo del operador disminuye la variable antes de
que su valor se utilice en la instrucción, como sigue:
C:\PS> $a = 7
C:\PS> $c = --$a
C:\PS> $a
6
C:\PS> $c
6
La versión de postfijo del operador disminuye la variable después
de haber utilizado su valor en la instrucción. En el ejemplo
siguiente, las variables $d y $a tienen valores diferentes porque
el valor se asigna a $d antes de que cambie $a:
C:\PS> $a = 7
C:\PS> $d = $a--
C:\PS> $a
6
C:\PS> $d
7
TIPOS DE MICROSOFT .NET FRAMEWORK
De forma predeterminada, cuando una variable tiene un solo valor,
el valor que se le asigna determina el tipo de datos de la
variable. Por ejemplo, el comando siguiente crea una variable
cuyo tipo es Integer (System.Int32):
$a = 6
Para buscar el tipo de .NET Framework de una variable, se utiliza
el método GetType y su propiedad FullName, como sigue. Es importante
asegurarse de incluir los paréntesis después del nombre del método
GetType, aunque la llamada al método no tenga ningún argumento:
C:\PS> $a = 6
C:\PS> $a.gettype().fullname
System.Int32
Para crear una variable que contiene una cadena, se asigna un valor de
cadena a la variable. Para indicar que el valor es una cadena, se
pone entre comillas, como sigue:
C:\PS> $a = "6"
C:\PS> $a.gettype().fullname
System.String
Si el primer valor asignado a la variable es una cadena, Windows
PowerShell tratará todas las operaciones como operaciones de cadena y
convertirá los nuevos valores en cadenas. Esto sucede en el ejemplo
siguiente:
C:\PS> $a = "archivo"
C:\PS> $a += 3
C:\PS> $a
archivo3
Si el primer valor asignado es un entero, Windows PowerShell
tratará todas las operaciones como operaciones de enteros y
convertirá los nuevos valores en enteros. Esto sucede en el ejemplo
siguiente:
C:\PS> $a = 6
C:\PS> $a += "3"
C:\PS> $a
9
El tipo de una variable escalar nueva se puede convertir en
cualquier tipo de datos de .NET Framework. Para ello, debe
escribirse el nombre del tipo de datos entre corchetes como
prefijo del nombre de la variable o del primer valor de asignación.
Al convertir una variable, es posible determinar los tipos de datos que
se pueden almacenar en ella. Además, se puede determinar cómo se
comportará la variable al manipularla.
Por ejemplo, el comando siguiente convierte la variable a un tipo
string:
C:\PS> [string]$a = 27
C:\PS> $a += 3
C:\PS> $a
273
En el ejemplo siguiente se convierte el primer valor, en lugar de la
variable:
$a = [string]27
Al convertir una variable a un tipo específico, la convención común es
convertir la variable propiamente dicha, y no su valor. Sin embargo,
no puede se puede volver a convertir el tipo de datos de una variable
existente si su valor no se puede convertir al nuevo tipo de datos.
Para cambiar el tipo de datos, es preciso reemplazar su valor, como sigue:
C:\PS> $a = "cadena"
C:\PS> [int]$a
No se puede convertir el valor "cadena" al tipo "System.Int32".
Error: "La cadena de entrada no tiene el formato correcto."
En línea:1 carácter:8
+ [int]$a <<<<
C:\PS> [int]$a =3
Además, si se usa un tipo de datos como prefijo de un nombre de
variable, el tipo de esa variable se bloquea, a menos que lo invalide
explícitamente especificando otro tipo de datos. Si se intenta
asignar un valor que no es compatible con el tipo existente y no invalida
explícitamente el tipo, Windows PowerShell muestra un error, como se
muestra en el ejemplo siguiente:
C:\PS> $a = 3
C:\PS> $a = "cadena"
C:\PS> [int]$a = 3
C:\PS> $a = "cadena"
No se puede convertir el valor "cadena" al tipo
"System.Int32". Error: "La cadena de entrada no tiene el formato
correcto."
En línea:1 carácter:3
+ $a <<<< = "cadena"
C:\PS> [string]$a = "cadena"
En Windows PowerShell, los tipos de datos de las variables que
contienen varios elementos en una matriz se administran de manera
diferente que los tipos de datos de las variables que contienen
un único elemento. A menos que se asigne un tipo de datos
específicamente a una variable de matriz, el tipo de datos es siempre
System.Object []. Este tipo de datos es específico de las matrices.
En ocasiones, se puede invalidar el tipo predeterminado
especificando otro. Por ejemplo, el comando siguiente convierte
la variable a un tipo de matriz string []:
[string []] $a = "uno", "dos", "tres"
Las variables de Windows PowerShell pueden tener cualquier tipo
de datos de .NET Framework. Además, se puede asignar el nombre
completo de cualquier tipo de datos de .NET Framework que esté
disponible en el proceso actual. Por ejemplo, el comando siguiente
especifica un tipo de datos System.DateTime:
[system.datetime]$a = "31/5/2005"
Se asignará a la variable un valor que se ajuste al tipo
System.DateTime. El valor de la variable $a sería el siguiente:
Martes, 31 de marzo de 2005 12:00:00 a.m.
ASIGNAR MÚLTIPLES VARIABLES
En Windows PowerShell se pueden asignar valores a múltiples
variables con un solo comando. El primer elemento del valor de
asignación se asigna a la primera variable, el segundo elemento
se asigna a la segunda variable, el tercer elemento a la tercera
variable, etc. Por ejemplo, el comando siguiente asigna el valor
1 a la variable $a, el segundo, el valor 2 a la variable $b y, el
tercero, el valor 3 a la variable $c:
C:\PS> $a, $b, $c = 1, 2, 3
Si el valor de asignación contiene más elementos que variables,
todos los valores que sobren se asignarán a la última variable.
Por ejemplo, el siguiente comando contiene tres variables y cinco
valores:
$a, $b, $c = 1, 2, 3, 4, 5
Por consiguiente, Windows PowerShell asignará el valor 1 a la
variable $a y el valor 2 a la variable $b. Además, asignará los
valores 3, 4 y 5 a la variable $c. Para asignar los valores de la
variable $c a otras tres variables, se utiliza el formato siguiente:
$d, $e, $f = $c
Este comando asigna el valor 3 a la variable $d, el valor 4, a la
variable $e y el valor 5, a la variable $f.
También puede asignar un valor individual a múltiples variables
encadenándolas. Por ejemplo, el siguiente comando asigna el valor "tres" a
cuatro variables:
$a = $b = $c = $d = "tres"
CMDLETS RELACIONADOS CON VARIABLES
Además de usar una operación de asignación para establecer el
valor de una variable, también se puede usar el cmdlet Set-Variable.
Por ejemplo, el comando siguiente usa Set-Variable para
asignar la matriz 1, 2, 3 a la variable $a.
Set-Variable -name a -value 1, 2, 3
VEA TAMBIÉN
about_Arrays
about_Hash_Tables
about_Variables
Clear-Variable
Remove-Variable
Set-Variable