Você precisa eliminar os argumentos desinteressantes:
shift 3
Se eu obtiver uma linha cmd como:
myscript param1 param2 param3 param4 param5 param6 ... (so on)
Como posso salvar uma string que consiste em parâmetros começando de um específico? O $ @ me dá toda a linha de comando concatenada. O que eu preciso é pegar uma string começando como "param4 param5 param6 ... (assim por diante)".
Você pode usar uma variante no fatiamento de matriz para fazer isso:
args1to3="${*:1:3}" # Three arguments starting from $1
args4on="${*:4}" # The arguments starting from $4
BTW, isso pode não ser o que você quer, porque apenas coloca os argumentos junto com espaços entre eles; se algum dos argumentos também contiver espaços, ele perderá a noção de quais espaços estavam dentro dos argumentos e quais estavam entre eles (veja BashFAQ # 50 ). Se você quiser mantê-los em linha, use uma matriz:
args1to3=("${@:1:3}") # Three arguments starting from $1, as an array
args4on=("${@:4}") # The arguments starting from $4, as an array
othercmd "${args1to3[@]}" # Pass the first 3 arguments intact
for somearg in "${args4on[@]}"; do # Process args 4 on, one at a time
othercmd2 "$somearg"
done
Tags bash string parameters