Pon comillas alrededor de múltiples argumentos
En este caso, getopts los tratará como un argumento, pero podrá dividirlo más adelante. Incluso puede poner todos los argumentos en la matriz a la vez:
#!/bin/bash
while getopts ":hr:l:" opt; do
case $opt in
r ) echo "Run Numbers - argument = $OPTARG "
set -f # disable glob
IFS=' ' # split on space characters
array=($OPTARG) ;; # use the split+glob operator
l ) echo "Latency range - argument = $OPTARG" ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
echo "Number of arguments: ${#array[@]}"
echo -n "Arguments are:"
for i in "${array[@]}"; do
echo -n " ${i},"
done
printf "\b \n"
El ejemplo de ejecución:
./script -r "123 456 789"
Y salida:
Run Numbers - argument = 123 456 789
Number of arguments: 3
Arguments are: 123, 456, 789
Use una coma (u otro carácter preferido) como delimitador
./script -r 123,456,789
y simplemente reemplazas IFS=" "
con IFS=,
en el código de arriba. Ese tiene la ventaja de permitir elementos vacíos. Como se señaló en la sección de comentarios, esta solución es elegida por algunos programas comunes, por ejemplo lsblk -o NAME,FSTYPE,SIZE
.
Permitir múltiples -r
opciones
Múltiple -r
, pero cada uno toma solo un argumento:
./script -r 123 -r 456 -r 789
Entonces los argumentos se agregarían a la matriz uno por uno
array+=("$OPTARG")
Ese tiene la ventaja de no tener limitaciones sobre qué caracteres pueden contener los elementos. Este también es utilizado por algunas herramientas estándar de Linux, por ejemplo awk -v var1=x -v var2=y
.
mount
.