Uso getopts per analizzare gli argomenti negli script bash come
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
conterrà eventuali opzioni / argomenti non analizzati. Dato che voglio usare exeparams per contenere le opzioni per l'esecuzione di un comando all'interno dello script (che può sovrapporsi alle opzioni proprie degli script), voglio usare - per terminare le opzioni passate allo script. Se passo ad es
myscript -d myscriptparam -- -d internalparam
exeparams
terrà
-- -d internalparam
Ora voglio rimuovere il --
comando principale per passare questi argomenti al comando interno. Esiste un modo elegante per farlo o posso ottenere una stringa che contiene solo il resto senza --
getopts?
shift; OPTIND=1
all'interno delgetopts
loop non è probabilmente il modo migliore per farlo. Funziona solo nel tuo caso perché hai solo 2 opzioni e in tutte le altre hai appena lasciato lo script. Altrimenti avresti bisognoshift; OPTIND=1
in ogni opzione, il che significa codice duplicato (cattiva pratica). Basta fareshift $((OPTIND - 1))
subito dopo la fine del ciclo: questo è il modo più convenzionale e probabilmente anche il più efficiente.