Me gustaría escribir un script bash con una cantidad desconocida de argumentos.
¿Cómo puedo analizar estos argumentos y hacer algo con ellos?
Un intento equivocado se vería así:
#!/bin/bash
for i in $args; do
echo $i
done
Hay una sintaxis especial para esto:
for i do
printf '%s\n' "$i"
done
De manera más general, la lista de parámetros del script o función actual está disponible a través de la variable especial $@
.
for i in "$@"; do
printf '%s\n' "$i"
done
Tenga en cuenta que necesita las comillas dobles $@
, de lo contrario, los parámetros se someterán a expansión de comodines y división de campos. "$@"
es mágico: a pesar de las comillas dobles, se expande en tantos campos como parámetros.
print_arguments () {
for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special !\characters' '-n' # prints 4 lines
print_arguments '' # prints one empty line
print_arguments # prints nothing
#! /usr/bin/env bash
for f in "$@"; do
echo "$f"
done
Debe citar $@
porque es posible que los argumentos contengan espacios (o nuevas líneas, etc.) si los cita o escapa de ellos con a \
. Por ejemplo:
./myscript one 'two three'
Eso son dos argumentos en lugar de tres, debido a las citas. Si no cita $@
, esos argumentos se dividirán dentro del script.
for f; do ...