Bash: fetta di parametri posizionali


19

Come posso ottenere una porzione di $@in Bash senza prima dover copiare tutti i parametri posizionali su un altro array come questo?

argv=( "$@" )
echo "${argv[@]:2}";

1
Cita sempre "$@". L' argvassegnazione verrebbe interrotta se qualche argomento contenesse spazi.
Jordan

Risposte:


31

È possibile utilizzare lo stesso formato di qualsiasi altro array. Per estrarre il 2o e il 3o elemento da $@, devi fare:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
Ma questo sembra funzionare su base char in char in v4.1.2, c'è un modo per farlo parola per parola?
Alexej Magura,

@AlexejMagura Non capisco cosa intendi. Questo agisce sugli elementi dell'array. Se hai elementi di un carattere, funzionerà "sui personaggi". Se ogni elemento è una parola, funziona sulle parole. Stai forse provando questo su una stringa e non su un array?
terdon

Sto provando su una copia di "$ @", che immagino possa diventare una stringa a quel punto, non ne sono sicuro.
Alexej Magura,

Su bash 4.2.46, in "${@:1:2}"realtà mi dà il 1 ° e 2 ° argomento della riga di comando . Nel frattempo, "${@:1}"mi fornisce gli argomenti completi della riga di comando e "${@:0}"mi dà il nome dello script seguito da argomenti completi della riga di comando .
Rockallite,

@Rockallite bene, sì. Il 2o e il 3o elemento $@ dell'array sono il 1o e il 2o argomento. "${@:1}"stamperà l'intero array a partire dal 2 ° elemento (il 1 ° argomento) e ${@:0}l'intero array a partire dal 1 ° elemento che è il nome dello script. Cosa ti aspettavi?
terdon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.