2010-03-05 4 views
34

Wenn Sie eine Liste in Python haben, und Sie möchten die Elemente von 2 bis n kann schön, etwas tun wieBash, Argumentliste Segment

list[2:] 

Ich mag etwas ähnliches mit argv zu würde in Bash. Ich möchte alle Elemente von $ 2 nach Argc an einen Befehl übergeben. Ich habe derzeit

command $2 $3 $4 $5 $6 $7 $8 $9 

aber das ist weniger als elegant. Wäre das der "richtige" Weg?

Antwort

61

Sie können "Slicing" auch tun, [email protected] alle Argumente in Bash wird.

echo "${@:2}" 

ab 2.em Argumente bekommt

zB

$ cat shell.sh 
#!/bin/bash 
echo "${@:2}" 

$ ./shell.sh 1 2 3 4 
2 3 4 
+9

Sie es auch in doppelten Anführungszeichen wickeln soll Probleme zu vermeiden mit Leerzeichen in Argumenten (zB echo "$ {@: 2}" 'würde richtig funktionieren, wenn mit' ./shell.sh 1 2 "Mehrwortargument" 4 5' aufgerufen wird). –

+1

Beachten Sie, dass dies auch die Länge unterstützt, d. H. '" $ {@: Start: len} "' – Dan

+0

Können Sie auch einen Standardwert angeben, wenn '$ {@: 2}' leer ist? – Gabriel

4

Speichern $1 irgendwo, dann shift und [email protected] verwenden?

+0

guten Vorschlag, aber ich denke, eine Operation auf einer Liste eleganter wäre – Mike