Pregunta 1¿Cuál es la forma correcta de asignar a una variable de shell?
Variables y sustitución de comandos — guardar el resultado con $(...)
Este artículo forma parte del Curso de Linux, con el que dominarás desde cero habilidades prácticas de Linux, desde los comandos básicos hasta los scripts de shell.
Asigna con name=value y referencia con "$name", observa cómo las comillas simples y dobles se expanden de forma distinta, ejecuta la sustitución de comandos $(date), haz aritmética $(( n * 2 )) y lee entrada con read — ilustrado y practicado en una terminal del navegador.
Usar variables — asignar y referenciar
En un script de shell, le das un nombre a un valor y lo reutilizas tantas veces como quieras.
Asignas con la forma name=value, y no debes poner espacios alrededor del =.
Si lo haces, se interpreta como un comando aparte y produce un error.
Lees el valor asignado con $name o ${name}.
Si un carácter sigue directamente a $name, se considera parte del nombre de la variable, así que usa ${name} para marcar el límite.
name=alice y luego léelo con $name para usarlo.Comillas — cómo difieren las simples y las dobles en la expansión
Hay dos tipos de comillas para envolver una cadena, y se expanden de forma distinta.
Dentro de las comillas simples '...', $name se trata literalmente y no se expande.
Dentro de las comillas dobles "...", $name se reemplaza por su valor.
Usa comillas dobles cuando quieras meter un valor en medio del texto, como "Hello $name", y comillas simples cuando quieras imprimir $ tal cual.
$name tal cual; las dobles lo reemplazan por el valor.name=alice # sin espacios alrededor de =
echo "hello $name" # hello alice (las dobles expanden)
echo 'hello $name' # hello $name (las simples no)
echo "path is ${name}/data" # usa {} para marcar el límite del nombre
Sustitución de comandos — $()
$(command) es una forma de usar la salida de un comando como un valor justo donde lo escribes.
Escribe algo como today=$(date +%Y-%m-%d) y la fecha que produce date entra directamente en today.
Lo usas para capturar el resultado de un comando en una variable o para meterlo en medio del texto.
$(date) se reemplaza por la salida de ejecutar date, y today=$(date) pone ese valor en la variable.today=$(date +%Y-%m-%d) # captura la salida de date en una variable
echo "today is $today" # incrusta el valor capturado en el texto
user=$(whoami) # la salida de otro comando también puede ser un valor
echo "user: $user"
Expansión aritmética — $(( ))
Dentro de $(( )) hay aritmética entera.
$(( 3 + 4 )) se reemplaza por 7.
Puedes usar + para sumar, - para restar, * para multiplicar, / para dividir y % para el resto.
Las variables van sin $, escritas simplemente por su nombre como $(( n * 2 )).
$(( )) se evalúa: $(( 3 + 4 )) es 7, y con n=5 entonces $(( n * 2 )) es 10.echo "sum: $(( 10 + 5 ))" # sumar da 15
n=7
echo "double: $(( n * 2 ))" # las variables van sin un $
echo "rest: $(( 17 % 5 ))" # el resto con % es 2
Recibir entrada — read
read v lee una línea de entrada y la pone en la variable v.
Lo usas cuando quieres pedirle un valor al usuario dentro de un script.
En la consola de este curso, pasar la entrada por un pipe, como printf 'value\n' | ./greet.sh, funciona de forma fiable.
Imprimir una pregunta con echo antes de read deja más claro qué hay que teclear.
read n lee una línea y la pone en n. Pasar un valor por pipe con printf lo entrega a read sin teclear a mano.echo "enter your name:" # pregunta qué hay que teclear
read who # lee una línea en who
echo "hi, $who" # incrusta en el texto el valor que recibiste
printf 'bob\n' | (read who; echo "hi, $who") # la entrada también puede venir de un pipe
Incrustar un conteo en un mensaje con sustitución de comandos
La sustitución de comandos $() se usa a menudo para capturar un «resultado contado», como un número de archivos, en una variable.
Escribe algo como n=$(ls *.txt | wc -l) y el resultado combinado de ls y wc -l entra en n.
Incrusta esa variable en una cadena con comillas dobles y puedes construir un mensaje legible de una línea que incluya el conteo.
ls y wc -l entra en n por sustitución de comandos, e incrustarlo en el texto muestra txt files: 2.Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cómo se muestra echo '$name' (cuando name=alice)?
Pregunta 3¿Qué forma pone la salida de un comando en una variable como valor?