Coloque aspas em vários argumentos
Nesse caso, o getopts os tratará como um argumento, mas você poderá dividi-lo mais tarde. Você pode até colocar todos os argumentos na matriz de uma 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"
O exemplo de execução:
./script -r "123 456 789"
E saída:
Run Numbers - argument = 123 456 789
Number of arguments: 3
Arguments are: 123, 456, 789
Use vírgula (ou outro caractere preferido) como um delimitador
./script -r 123,456,789
e você apenas substitui IFS=" "
por IFS=,
no código acima. Esse tem a vantagem de permitir elementos vazios. Como apontado na seção de comentários, esta solução é escolhida por alguns programas comuns, por exemplo lsblk -o NAME,FSTYPE,SIZE
.
Permitir várias -r
opções
Múltiplos -r
, mas cada um tendo apenas um argumento:
./script -r 123 -r 456 -r 789
Em seguida, os argumentos seriam adicionados à matriz, um por um
array+=("$OPTARG")
Esse tem a vantagem de não ter limitações sobre quais caracteres os elementos podem conter. Este também é usado por algumas ferramentas padrão do Linux, por exemplo awk -v var1=x -v var2=y
.
mount
.