Bash: Stück Positionsparameter


19

Wie kann ich ein Stück $@in Bash erhalten, ohne zuerst alle Positionsparameter in ein anderes Array wie dieses kopieren zu müssen?

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

1
Immer zitieren "$@". Ihre argvZuweisung würde brechen, wenn irgendwelche Argumente Leerzeichen enthalten.
— Jordan

Antworten:


31

Sie können dasselbe Format wie für jedes andere Array verwenden. Um das 2. und 3. Element aus zu extrahieren $@, würden Sie Folgendes tun:

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

1
Aber dies scheint in Version 4.1.2 Zeichen für Zeichen zu funktionieren. Gibt es eine Möglichkeit, dies Wort für Wort zu tun?
— Alexej Magura

@AlexejMagura Ich verstehe nicht, was du meinst. Das wirkt sich auf die Elemente des Arrays aus. Wenn Sie Ein-Zeichen-Elemente haben, funktioniert es "auf Zeichen". Wenn jedes Element ein Wort ist, funktioniert es mit Wörtern. Versuchen Sie das vielleicht an einem String und nicht an einem Array?
— Terdon

Ich versuche es mit einer Kopie von "$ @", die an diesem Punkt vermutlich zu einer Zeichenfolge wird. Ich bin mir nicht sicher.
— Alexej Magura

Gibt "${@:1:2}"mir in Bash 4.2.46 tatsächlich die 1. und 2. Befehlszeilenargumente . In der Zwischenzeit "${@:1}"erhalte ich die vollständigen Befehlszeilenargumente und "${@:0}"den Skriptnamen, gefolgt von den vollständigen Befehlszeilenargumenten .
— Rockallite

@ Rockallite gut, ja. Das 2. und 3. Element des $@ Arrays sind das 1. und 2. Argument. "${@:1}"Gibt das gesamte Array aus, beginnend mit dem 2. Element (dem 1. Argument) und ${@:0}das gesamte Array beginnend mit dem 1. Element, das der Name des Skripts ist. Was hast du erwartet?
— Terdon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.