Shell expansions
En este artículo explico de forma clara y práctica cómo funcionan las expansiones más importantes de la shell.
Paso a paso
Aquí presento cada tipo de expansión con una breve descripción y ejemplos explicados.
1. Expansión con * (comodín general)
El asterisco reemplaza cero o más caracteres.
2. Expansión con ? (un carácter exacto)
El signo ? reemplaza exactamente un carácter.
3. Conjuntos de caracteres []
Permiten definir rangos o listas de caracteres válidos.
4. Expansión de llaves {}
Sirve para generar múltiples cadenas o secuencias.
5. Expansión de tilde ~
Representa el directorio home del usuario.
6. Expansión de variables $VAR
Permite utilizar variables dentro de comandos.
7. Sustitución de comandos $( )
Inserta la salida de un comando dentro de otro.
8. Evitar expansiones
Uso de barras invertidas y comillas para proteger caracteres.
Bloque de comandos
A continuación están los ejemplos completos utilizados en el artículo.
Usando *
Listar todos los archivos que terminan en .txt:
Output:
Listar archivos que contienen file en el nombre:
Output:
Usando ?
Archivos con un carácter exacto antes de .log:
Output:
Usando []
Reportes de 2023 y 2024:
Output:
Usando {}
Archivos .txt y .log:
Output:
Crear varios reportes:
Crear secuencia numérica:
Crear secuencia de letras:
Tilde ~
Variables
Sustitución de comandos
touch data/log_$(date +%Y-%m-%d).txt
ls data/log_*.txt
echo "Hay $(ls data | wc -l) elementos en data."
Proteger argumentos
echo "El valor de \$HOME es su directorio home."
echo 'La fecha actual es $(date +%Y-%m-%d).'
MY_DATE=$(date +%Y-%m-%d)
echo "Hoy es $MY_DATE."
Eliminar el directorio data
Buenas prácticas
- Use comillas simples cuando no quiera que nada se expanda.
- Use comillas dobles cuando necesite variables pero quiera controlar el resto de expansiones.
- Prefiera
$( )sobre backticks para sustitución de comandos. - Utilice brace expansion para automatizar la creación de múltiples archivos.
- Verifique siempre qué archivos afectará un comodín usando
primero
ls.