20  Caracteres, Strings y Wildcards

Fecha: 22 de septiembre, 2026

20.1 Estructura de declaración de variables en bash

La estructura básica para declarar una variable en bash es:

nombre_variable=valor

20.1.1 Reglas importantes para nombres de variables

  • Deben comenzar con una letra o guion bajo (_)

  • Pueden contener letras, números y guiones bajos

  • No pueden contener espacios alrededor del signo =

  • Son sensibles a mayúsculas y minúsculas (edad ≠ EDAD)

  • No se usan espacios entre el nombre, el = y el valor

20.1.2 Ejemplos de declaración correcta e incorrecta

✅ Correcto:

nombre="Juan"
edad=25
_variable="valor"
mi_nombre="Carlos"

❌ Incorrecto:

nombre = "Juan"        # Espacios alrededor del =
2nombre="Juan"         # Comienza con número
mi-nombre="Juan"       # Guion en lugar de guion bajo

20.2 Acceder a variables con $

Para usar o acceder al valor de una variable, debes anteponer el símbolo $ al nombre:

nombre="Juan"
echo $nombre           # Output: Juan
echo "Hola $nombre"    # Output: Hola Juan

20.3 Tipos de comillas y su comportamiento

20.3.1 Comillas dobles "..." - Expansión de variables

Las comillas dobles permiten la expansión de variables. Esto significa que el $ se interpreta como inicio de una variable:

nombre="Juan"
echo "Hola $nombre"    # Output: Hola Juan

Aquí, $nombre se reemplaza por su valor Juan.

20.3.2 Comillas simples '...' - Sin expansión

Las comillas simples tratan todo literalmente. El $ no se interpreta como variable:

nombre="Juan"
echo 'Hola $nombre'    # Output: Hola $nombre

Aquí, $nombre se imprime tal cual, sin reemplazarse.

20.3.3 Sin comillas - Expansión directa

Sin comillas, también se expanden las variables:

nombre="Juan"
echo Hola $nombre      # Output: Hola Juan

20.4 Caracteres

Los caracteres son unidades de información que se representan con símbolos. Pueden ser de varios tipos como alfanuméricos, números enteros, signos de puntuación. Varios caracteres son interpretados por la shell de manera especial. Estos se llaman caracteres especiales, claro, y permiten desarrollar alguna lógica, dependiendo del contexto. Por ejemplo, algunos caracteres: @ # . ? ! , / \ > ~ a µ g § R |(pipe).

Cada carácter se asocia a una combinación diferente de teclas en el teclado del computador. Representa un símbolo individual que puede ser:

  • Letras: a, b, c, A, B, C, etc.
  • Dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • Símbolos especiales: !, @, #, $, %, &, *, (, ), -, _, +, =, etc.
  • Espacios en blanco: espacios, tabulaciones, saltos de línea
  • Caracteres de control: caracteres invisibles que controlan el comportamiento (como el salto de línea)

20.5 Metacaracteres

20.5.1 ¿Qué son los metacaracteres?

Los metacaracteres son caracteres especiales que tienen un significado especial en bash, en lugar de representar su valor literal. Bash los interpreta como instrucciones o comandos, no como texto normal.

20.6 Strings

Los strings (o cadena de texto) son arreglos de caracteres. Es decir, es una combinación de uno o más caracteres que forman un texto.

"Hola"              → string de 4 caracteres
"Bash es genial"    → string de 14 caracteres (incluyendo espacios)
"12345"             → string de 5 caracteres
"!@#$%"             → string de 5 caracteres especiales
""                  → string vacío (0 caracteres)

20.6.1 Características de los strings en bash

20.6.2 Inmutabilidad en contexto de asignación

Los strings en bash son inmutables en el sentido de que no puedes modificar un carácter individual directamente. Debes reasignar todo el string:

nombre="Juan"
nombre="Carlos"    # Reasignación completa del string
echo $nombre       # Output: Carlos

20.6.3 Sensibilidad a mayúsculas y minúsculas

Los strings distinguen entre mayúsculas y minúsculas. Dos strings con diferente capitalización se consideran diferentes:

nombre="juan"
NOMBRE="JUAN"
echo $nombre       # Output: juan
echo $NOMBRE       # Output: JUAN
# Son variables diferentes

20.6.4 Pueden contener espacios en blanco

Los strings pueden incluir espacios, tabulaciones y saltos de línea. Para preservarlos, debes usar comillas:

# Con comillas (preserva espacios)
frase="Hola mundo desde bash"
echo "$frase"      # Output: Hola mundo desde bash

# Sin comillas (los espacios se interpretan como separadores)
echo Hola mundo    # Output: Hola mundo (pero se trata como 2 argumentos)
Importante¿Qué son los argumentos?

Un argumento es un valor o dato que se pasa a un comando o programa para que lo procese. Los argumentos son la forma en que le das información a un comando sobre qué debe hacer.

20.6.5 Estructura básica

comando argumento1 argumento2 argumento3

20.6.6 Ejemplo sin comillas

echo Hola mundo

En este caso:

  • Comando: echo
  • Argumento 1: Hola
  • Argumento 2: mundo

Bash pasa dos argumentos al comando echo, y echo los imprime separados por un espacio.

20.6.7 Ejemplo con comillas

echo "Hola mundo"

En este caso:

  • Comando: echo
  • Argumento 1: Hola mundo (un solo argumento)

20.6.8 Pueden estar vacíos

Un string puede no contener ningún carácter (string vacío):

variable=""
echo "La variable está vacía: '$variable'"  # Output: La variable está vacía: ''

20.6.9 Concatenación automática / Unión

Bash permite concatenar strings simplemente colocándolos uno al lado del otro:

nombre="Juan"
apellido="Pérez"

# Concatenación sin espacios
completo=$nombre$apellido
echo $completo     # Output: JuanPérez

# Concatenación con espacios
completo="$nombre $apellido"
echo $completo     # Output: Juan Pérez

# Concatenación con variables y texto literal
mensaje="Hola, $nombre"
echo $mensaje      # Output: Hola, Juan

20.6.10 Longitud de strings

Puedes obtener la longitud de un string usando ${#variable}:

ImportanteDesglose de la sintaxis ${#variable}
  • ${ } → Delimitadores para expansión de variables en bash
  • # → Operador que significa “obtener la longitud”
  • variable → El nombre de la variable cuya longitud quieres obtener

Ejemplos:

nombre="Juan"
longitud=${#nombre}
echo "La longitud es: $longitud"  # Output: La longitud es: 4

# Ejemplo con string más largo
frase="Bash es genial"
echo ${#frase}     # Output: 14 (incluyendo espacios)

20.6.11 Extracción de subcadenas

Puedes extraer una parte de un string usando ${variable:inicio:longitud}:

ImportanteDesglose de la sintaxis ${variable:inicio:longitud}
  • ${ } → Delimitadores para expansión de variables en bash
  • variable → El nombre de la variable de la cual extraerás caracteres
  • :inicio → La posición donde comienza la extracción (comienza en 0)
  • :longitud → Cuántos caracteres quieres extraer

Ejemplos:

nombre="Juan"

# Extraer desde posición 0, 2 caracteres
echo ${nombre:0:2}    # Output: Ju

# Extraer desde posición 1, 2 caracteres
echo ${nombre:1:2}    # Output: ua

# Extraer desde posición 2 hasta el final
echo ${nombre:2}      # Output: an

20.6.12 Sustitución de patrones

Puedes reemplazar partes de un string usando ${variable/patron/reemplazo}:

frase="Hola mundo mundo"

# Reemplazar la primera ocurrencia
echo ${frase/mundo/bash}      # Output: Hola bash mundo

# Reemplazar todas las ocurrencias (con //)
echo ${frase//mundo/bash}     # Output: Hola bash bash

20.6.13 Eliminación de patrones

Puedes eliminar partes de un string:

nombre="Juan.txt"

# Eliminar desde el final hasta el patrón
echo ${nombre%.txt}           # Output: Juan

# Eliminar desde el inicio hasta el patrón
echo ${nombre#Juan.}          # Output: txt

20.6.14 Conversión a mayúsculas y minúsculas

Bash permite convertir strings a mayúsculas o minúsculas (en versiones 4.0+):

nombre="Juan"

# Convertir a mayúsculas
echo ${nombre^^}              # Output: JUAN

# Convertir a minúsculas
echo ${nombre,,}              # Output: juan

# Convertir solo el primer carácter a mayúscula
echo ${nombre^}               # Output: Juan

20.6.15 Comparación de strings

Puedes comparar strings usando operadores:

nombre1="Juan"
nombre2="Juan"
nombre3="Carlos"

# Igualdad
echo "$nombre1 = $nombre2"    # Output: Juan = Juan

# Desigualdad
echo "$nombre1 != $nombre3"   # Output: Juan != Carlos

20.6.16 Expansión de variables dentro de strings

La expansión de variables ocurre dentro de comillas dobles pero no en comillas simples:

nombre="Juan"

# Con comillas dobles (expansión)
echo "Hola $nombre"           # Output: Hola Juan

# Con comillas simples (sin expansión)
echo 'Hola $nombre'           # Output: Hola $nombre

# Sin comillas (expansión)
echo Hola $nombre             # Output: Hola Juan

20.6.17 Caracteres especiales y escape

Algunos caracteres tienen significado especial en bash. Puedes escaparlos con \:

# Caracteres especiales
echo "Precio: \$100"          # Output: Precio: $100
echo "Comilla: \"Hola\""      # Output: Comilla: "Hola"
echo "Barra invertida: \\"    # Output: Barra invertida: \

# Saltos de línea
echo -e "Línea 1\nLínea 2"    # Output: Línea 1
                              #         Línea 2
Tip¿Qué es \n?

\n es una secuencia de escape que representa un salto de línea o enter. Es decir, le dice al programa que cree una nueva línea.

  • \ → Carácter de escape (indica que lo siguiente tiene un significado especial)
  • n → Significa “newline” (nueva línea en inglés)
Importante¿Por qué necesitas -e en echo al usar \n?

El comando echo no interpreta \n por defecto. Necesitas la opción -e para que bash entienda que \n significa un salto de línea:

# Sin -e: imprime \n literalmente
echo "Línea 1\nLínea 2"
# Output: Línea 1\nLínea 2

# Con -e: interpreta \n como salto de línea
echo -e "Línea 1\nLínea 2"
# Output: Línea 1
#         Línea 2

Otras secuencias de escape comunes 📌

Además de \n, existen otras secuencias de escape útiles:

# \t = tabulación (espacios)
echo -e "Nombre:\tJuan"
# Output: Nombre:    Juan

# \\ = barra invertida literal
echo -e "Ruta: C:\\Users\\Juan"
# Output: Ruta: C:\Users\Juan

# \" = comilla doble literal
echo -e "Dice: \"Hola\""
# Output: Dice: "Hola"

20.6.18 Strings multilínea

Puedes crear strings que abarquen múltiples líneas:

# Usando comillas dobles
texto="Primera línea
Segunda línea
Tercera línea"
echo "$texto"

# Usando $'...' (permite secuencias de escape)
texto=$'Primera línea\nSegunda línea\nTercera línea'
echo "$texto"

Resumen 🎯

  • Saltos de línea literales (Enter real en el código): No necesitan -e ni \n
  • Secuencias de escape \n: Necesitan -e o $'...' para interpretarse

20.7 Wildcards

Los wildcards (comodines) o wild characters son símbolos utilizados para representar uno o más caracteres. Se pueden utilizar con otros comandos para facilitar el procesamiento o búsqueda de archivos, directorios y datos en general.

Wildcard Significa Ejemplo Coincide con
* Cero o más caracteres *.txt archivo.txt, doc.txt, a.txt
? Exactamente 1 carácter archivo?.txt archivo1.txt, archivo2.txt
[ ] Un carácter del conjunto [abc]* archivo.txt, buscador.log, carpeta
[!...] Un carácter NO en el conjunto [!0-9]* archivo.txt (NO comienza con número)
[a-z] Rango de caracteres [a-z]* archivo.txt (comienza con minúscula)
[0-9] Rango de números *[0-9] archivo1, test2
Importante

El wildcard más usado es * porque es muy versátil.

NotaEjercicio 3

El wildcard * me permitiría encontrar todos los archivos en una carpeta que tengan la palabra TESIS en ellos. Primero crea la carpeta:

mkdir taller_unix

Después, debemos generar estos archivos:

cd taller_unix/
touch MI_TESIS.tex MI_TESIS_tutor2.tex TESIS.tex TESIS_YA_ACABATE.tex TESIS_finaaaaal.tex TESIS_final.tex TESIS_tutor1.tex TESIS_tutor2.tex a_reporte_01.txt b_reporte_02.txt c_reporte_03.txt z_reporte_30.txt 
  1. Enlista todos los archivos que comiencen con “TESIS”.

  2. Enlista todos los archivos que terminen con el string “.tex”

  3. Buscar todos los archivos contengan la palabra “TESIS" pero con 3 caracteres desconocidos antes.

  4. Buscar los archivos que terminen con el número 1 o 2 en su nombre antes de la extensión del archivo (.tex).

  5. Encontrar los archivos que terminen en dos números del 1 al 3 y del 0 al 2 antes del formato del archivo (.txt).

  6. Encontrar todos los archivos con este formato ?_reporte_[0-3][0-3].txt

  7. Encontrar todos los archivos que contengan por a o z.

  8. Borramos todos estor archivos que terminen en “.txt” y “.tex”

    1. ls -l TESIS*
    2. ls -l *.tex
    3. ls -l ???TESIS*
    4. ls -l *[1-2].tex
    5. ls -l *[1-3][0-2].txt
    6. ls -l ?_reporte_[0-3][0-3].txt
    7. ls -l *[az]*
    8. rm *.tex *.txt

20.8 Material suplementario