# Variables y Subexpresiones

En Nushell hay dos tipos de expresiones de evaluación: variables y subexpresiones. Cuando lees expresiones que empiezan con el signo dólar ($) sabes que trabajas con una expresión de evaluación. Esto indica que cuando Nushell toma el valor en esta posición, necesitará ejecutar un paso de evaluación para procesar la expresión y posterioremente usar el valor del resultado. Ambas formas de expresión de evaluación soportan un modo simple y una forma ruta (path) para trabajar con datos más complejos.

# Variables

La variable es el más simple de ambas expresiones de evaluación. Durante la evaluación, una variable es remplazada for su valor.

Si creamos una variable, podemos imprimir su contenido al usar $ para referir a la misma:

> let mi-valor = 4
> echo $mi-valor
4

# Variables rutas (paths)

Una variable ruta funciona al llegar dentro del contenido de una variable, navegando columnas dentro de la misma para alcanzar un valor final. Supongamos que en vez de 4, hayamos asignado una tabla como valor:

> let mi-valor = [[nombre]; [pruebausuario]]

Podemos usar variables ruta para evaluar la variable $mi-valor y obtener el valor de la columna nombre con un solo paso:

> echo $mi-valor.nombre
pruebausuario

# Subexpresiones

Siempre puedes evaluar subexpresiones y usar su resultado envolviendo la expresión entre paréntesis ().

Los paréntesis contienen una tubería que se ejecutará hasta completar, y su valor final será usado. Por ejemplo, (ls) ejecutaría el comando ls, devolviendo como resultado la tabla y (git branch --show-current) ejecutará el comando externo git y devolver una cadena con el nombre de la rama actual. También puedes usar paréntesis para ejecutar expresiones matemáticas como (2 + 3).

Subexpresiones también pueden ser tuberías y no solamente comandos individuales. Si desearamos una lista de nombres de archivos superiores a diez kilobytes, podemos utilizar subexpresiones para ejecutar una tubería y asignar el resultado a una variable:

> let nombres-de-archivos-grandes = (ls | where size > 10kb)
> echo $nombres-de-archivos-grandes
───┬────────────┬──────┬──────────┬──────────────
 # │    name    │ type │   size   │   modified   
───┼────────────┼──────┼──────────┼──────────────
 0 │ Cargo.lock │ File │ 155.3 KB │ 17 hours ago 
 1 │ README.md  │ File │  15.9 KB │ 17 hours ago 
───┴────────────┴──────┴──────────┴──────────────

# Subexpresiones y rutas

Subexpresiones también soportan rutas. Por ejemplo, supongamos que queremos una lista de nombres de archivos en el directorio actual. Una manera de hacerlo es con una tubería:

> ls | get name

Pero también podemos hacer una acción similar con un solo paso usando una subexpresión de ruta:

> echo (ls).name

Todo depende de las necesidades del código o estilo particular que trabaje mejor para ti.