Elabora tutti gli argomenti tranne il primo (in uno script bash)

Ho un semplice script in cui il primo argomento è riservato al nome del file e tutti gli altri argomenti facoltativi dovrebbero essere passati ad altre parti dello script.

Usando Google ho trovato questo wiki , ma ha fornito un esempio letterale:

echo "${@: -1}" 

Non riesco a far funzionare altro, come:

 echo "${@:2}" 

o

 echo "${@:2,1}" 

Ricevo “Ctriggers sostituzione” dal terminale.

Qual è il problema e come posso elaborare tutto tranne il primo argomento passato a uno script bash?

Usa questo:

 echo "${@:2}" 

La seguente syntax:

 echo "${*:2}" 

funzionerebbe pure, ma non è raccomandato, perché come @Gordon ha già spiegato, che usando * , esegue tutti gli argomenti insieme come un singolo argomento con spazi, mentre @ conserva le interruzioni tra di essi (anche se alcuni degli argomenti stessi contenere spazi). Non fa la differenza con l’ echo , ma è importante per molti altri comandi.

Se vuoi una soluzione che funzioni anche in /bin/sh prova

 first_arg="$1" shift echo First argument: "$first_arg" echo Remaining arguments: "[email protected]" 

shift [n] sposta i parametri posizionali n volte. Un shift imposta il valore di $1 sul valore di $2 , il valore di $2 sul valore di $3 e così via, diminuendo il valore di $# di uno.

http://wiki.bash-hackers.org/scripting/posparams

Spiega l’uso di shift (se vuoi scartare i primi N parametri) e poi implementa l’uso di massa (cerca l’intestazione con quel titolo).