Es sollte viel einfacher als die Schleife in der Frage:
shift 8
echo "$*"
Argumente verlieren 1-8; Drucken Sie alle anderen Argumente als eine einzige Zeichenfolge mit einem einzelnen Leerzeichen, das die Argumente trennt (und Leerzeichen innerhalb der Argumente erhalten).
Oder, wenn Sie es in einer Variablen benötigen, dann:
nine_onwards="$*"
Oder, wenn Sie nicht die ersten 8 Argumente in der Haupt Shell-Prozess wegzuwerfen:
nine_onwards="$(shift 8; echo "$*")"
können Sie überprüfen Sie, dass es mindestens 9 Argumente gibt, natürlich, beschweren, wenn es nicht gibt. Oder Sie können stattdessen eine leere Zeichenfolge akzeptieren - ohne Fehler.
Und wenn die Argumente müssen (auf die Frage, wie im Änderungsantrag) ohne Leerzeichen verkettet werden, dann müssen Sie mit $IFS
jonglieren:
nine_onwards="$(shift 8; IFS=""; echo "$*")"
Wenn ich die Kommentare von der Interpretation bin Unter dieser Antwort richtig, dann möchten Sie die ersten 8 Argumente in 8 separaten einfachen (Nicht-Array-) Variablen und dann Argumente 9 weiter in einer anderen einfachen Variablen ohne Leerzeichen zwischen den Argumentwerten speichern.
Die trivialen machbar:
var1="$1"
var2="$2"
var3="$3"
var4="$4"
var5="$5"
var6="$6"
var7="$7"
var8="$8"
var9="$(shift 8; IFS=""; echo "$*")"
Die Namen müssen als diejenigen nicht, wie eng verwandt sind. Sie könnten verwenden:
teflon="$1"
absinthe="$2"
astronomy="$3"
lobster="$4"
darkest_peru="$5"
mp="$6"
culinary="$7"
dogma="$8"
concatenation="$(shift 8; IFS=""; echo "$*")"
Sie müssen sie nicht in dieser Reihenfolge tun; Jede Sequenz (Permutation) wird gut funktionieren.
Beachten Sie auch, dass in der Frage, Sie haben:
array="${@}"
Trotz des Namens, die eine einfache Variable enthalten, die Argumente erzeugt. Um ein Array zu erstellen, müssen Sie Klammern wie diese, wo die Räume sind optional:
array=("[email protected]")
Weder 'Array = "$ @"' oder 'array = $ {@}' tatsächlich schafft ein Array ; 'Array' ist in beiden Fällen eine Zeichenfolge. Wenn Sie möchten, dass Ihr 'Array' tatsächlich ** ein Array ist, muss es' Array = ("$ @") ' –