2010-03-05 13 views
34

Jeśli masz listę w Pythonie, a chcesz elementów od 2 do n może zrobić coś fajnego jakBash, lista Segment argumentem

list[2:] 

Chciałbym coś podobnego z argv w bash. Chcę przekazać wszystkie elementy od 2 $ do argc do polecenia. Obecnie mam

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

ale jest to mniej niż elegancki. Czy byłby to "właściwy" sposób?

Odpowiedz

61

można zrobić "krojenie", jak również, [email protected] dostaje wszystkie argumenty w bash.

echo "${@:2}" 

dostaje argument 2 r

np

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

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

Należy również owinąć ją w cudzysłów, aby uniknąć problemów ze spacjami w argumentach (np. 'echo '$ {@: 2}" 'działałoby poprawnie po wywołaniu z' ./shell.sh 1 2 "argumentem wielu słów" 4 5'). –

+1

Warto zauważyć, że obsługuje to również długość, tj. "$ {@: Start: len}" ' – Dan

+0

Czy możesz podać wartość domyślną, jeśli' $ {@: 2} 'jest puste? – Gabriel

4

Sklep $1 gdzieś, następnie shift i użyj [email protected]?

+0

dobrą propozycję, ale myślę, że operacja na liście byłby bardziej elegancki – Mike