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?
"$@"
. Ihreargv
Zuweisung würde brechen, wenn irgendwelche Argumente Leerzeichen enthalten.Antworten:
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:quelle
"${@: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 .$@
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?