Obtener sólo el último argumento

Obtener solo el último argumento en Bash

En entornos Linux y UNIX es frecuente trabajar con scripts que reciben un número variable de argumentos. Muchas veces solo nos interesa procesar el último parámetro pasado al script o a una función. En este artículo mostramos distintas técnicas para lograrlo, sus ventajas, limitaciones y ejemplos prácticos.

1. Variables especiales de Bash

En Bash existen ciertas variables y expresiones que facilitan el acceso a los parámetros posicionales:

  • #: número total de argumentos.
  • @ o : todos los argumentos.
  • n: el enésimo argumento (por ejemplo 1).

La forma más directa de alcanzar el último parámetro es combinando # con la expansión indirecta:

#!/usr/bin/env bash

# Obtener índice del último argumento
last_index=#

# {!var} expande la variable cuyo nombre es el valor de var
last_arg={!last_index}

echo El último argumento es: last_arg

2. Uso de parameter expansion avanzada

También podemos utilizar la sintaxis de parameter expansion directamente con @:

last_arg={@: -1}
echo Último argumento: last_arg

Explicación:

  • {@:start:length} extrae un subconjunto de argumentos.
  • Con start=-1 y omitiendo length, seleccionamos solo el último.

3. Empleando shift en bucles

Si preferimos no depender de índices, podemos iterar con shift:

#!/usr/bin/env bash

last_arg=
while (( # > 0 )) do
  last_arg=1
  shift
done

echo Último argumento: last_arg

Ventajas:

  • Funciona incluso si # cambia dentro del bucle.
  • No requiere expansión indirecta.

4. Ejemplos en funciones

Dentro de una función Bash, la lógica es idéntica. Solo cambia el alcance de las variables posicionales:

function procesa() {
  local last={@: -1}
  echo Función recibió #: argumentos último: last
}

procesa uno dos tres cuatro

5. Casos especiales y buenas prácticas

  • Manejo de argumentos vacíos: Si el usuario invoca el script sin parámetros, # será cero. Conviene validar:
    if (( # == 0 )) then
      echo Error: se requieren argumentos
      exit 1
    fi
  • Citas y espacios: Siempre envolver la expansión entre comillas para preservar espacios:
    {@: -1} en lugar de {@: -1}.
  • Compatibilidad: La expansión {@: -1} funciona en Bash 4 . Para versiones antiguas use shift o la expansión indirecta.

6. Alternativas con herramientas externas

Podemos delegar la extracción en awk o sed si nuestro input es una línea de texto:

linea=uno dos tres cuatro
echo linea  awk {print NF}
# o
echo linea  sed -E s/.[[:space:]] //

Comparativa de métodos

Método Compatibilidad Complejidad
{!#} Bash 3 Baja
{@: -1} Bash 4 Muy baja
Bucles con shift Todas Media
awk / sed Todas Media

Recursos y enlaces útiles

VPNs recomendadas

Si tu script maneja conexiones remotas seguras, quizás quieras utilizar una VPN estable y de código abierto como:

Este artículo proporciona técnicas para extraer el último argumento en distintos escenarios de scripting Bash, garantizando robustez y legibilidad.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *