C'è un modo per impostare i parametri posizionali di uno script bash da una funzione?Modifica parametri posizionali globali all'interno di una funzione Bash
Nell'ambito globale è possibile utilizzare set -- <arguments>
per modificare gli argomenti posizionali, ma non funziona all'interno di una funzione poiché modifica i parametri posizionali della funzione.
Una rapida illustrazione:
# file name: script.sh
# called as: ./script.sh -opt1 -opt2 arg1 arg2
function change_args() {
set -- "a" "c" # this doesn't change the global args
}
echo "original args: [email protected]" # original args: -opt1 -opt2 arg1 arg2
change_args
echo "changed args: [email protected]" # changed args: -opt1 -opt2 arg1 arg2
# desired outcome: changed args: a c
AFAIK, la risposta è "no, una funzione non può modificare i parametri posizionali globali dello script". –
L'unico modo in cui posso pensare a questo sarebbe avere la funzione echo nel comando set ed eseguire '$ (change_args)' al livello superiore. Se questo fosse javascript, ci sarebbero dei giochi "eval" che potrebbero essere giocati qui, credo, ma non credo che esistano cose del genere nella shell. –