verketten Sie die cmd-Zeile ab einem Parameter

1542
azerIO

Wenn ich eine cmd Zeile bekomme:

myscript param1 param2 param3 param4 param5 param6 ... (so on) 

Wie kann ich einen String speichern, der aus bestimmten Parametern besteht? Das $ @ gibt mir die gesamte Befehlszeile aneinander. Was ich brauche, ist eine Zeichenkette wie "param4 param5 param6 ... (so weiter)".

4

2 Antworten auf die Frage

4
ceving

Sie müssen immer die uninteressanten Argumente nehmen durch:

shift 3 
4
Gordon Davisson

Sie können dazu eine Variante für das Array-Slicing verwenden:

args1to3="${*:1:3}" # Three arguments starting from $1 args4on="${*:4}" # The arguments starting from $4 

Übrigens, dies ist möglicherweise nicht das, was Sie wollen, weil es die Argumente mit Leerzeichen zwischen ihnen zusammenhält. Wenn eines der Argumente auch Leerzeichen enthält, verliert es den Überblick darüber, welche Leerzeichen sich innerhalb von Argumenten befanden und welche dazwischen waren (siehe BashFAQ # 50 ). Wenn Sie sie gerade halten möchten, verwenden Sie stattdessen ein Array:

args1to3=("${@:1:3}") # Three arguments starting from $1, as an array args4on=("${@:4}") # The arguments starting from $4, as an array  othercmd "$" # Pass the first 3 arguments intact for somearg in "$"; do # Process args 4 on, one at a time othercmd2 "$somearg" done