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 omitiendolength
, 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 useshift
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.
Leave a Reply