mobile menu icon

Cuidado que ($a -eq $a) no siempre es $true

Publicado por Modesto San Juan el 07/08/2015

PowerShell, DevOps


Este es uno de esos ejemplos en los que es importante intentar documentarse todo lo posible al desarrollar en un lenguaje/plataforma que no conocemos. Es frecuente asumir conceptos basados en nuestros conocimientos previos de otros lenguajes, pero en ocasiones nos puede jugar malas pasadas. En este caso voy a mostrar un ejemplo muy sencillo en el que yo asumí erróneamente el funcionamiento de algo tan sencillo como un operador de comparación.

Este problema lo encontré desarrollando una prueba mientras practicaba TDD. Por hacerlo fácil, este es el ejemplo más simple que se me ocurre para describir lo equivocado que estaba:

$a = @("item1", "item2")
if ($a -eq $a) { Write-Host "$a es igual que $a" }
else { Write-Host "$a no es igual que $a" }

Asumiendo que -eq es el operador de igualdad, alguien que no conozca PowerShell pero si conozca otros lenguajes de programación podría asumir que este script de ejemplo entraría por el if en lugar de por el else. Mi error fue precisamente ese. Si ejecuto este script en powershell, pintará en pantalla “item1 item2 no es igual que item1 item2”.

Si me hubiera molestado en leer la documentación de PowerShell hubiera visto que el operador -eq es bastante peculiar y en realidad hace algo más complicado. Aunque recomiendo leer la fuente original, estes es un pequeño resumen:

Conclusión, hay que leer más. Para mi es de mucha ayuda leer código de otros. Estudiar cómo están desarrollados Pester o Psake me ha permitido entender mucho mejor las bondades de PowerShell.

Publicado originalmente en el blog de Modesto San Juan.

Volver a posts