concatena a linha cmd a partir de algum parâmetro

4

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)".

    
por azerIO 07.05.2011 / 18:42

2 respostas

4

Você precisa eliminar os argumentos desinteressantes:

shift 3
    
por 07.05.2011 / 18:51
4

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
    
por 08.05.2011 / 00:44