2011-02-06 8 views
69

używam powłoki bash na Linux i chcą korzystać z ponad 10 parametrów w skrypcie powłokiJak obsługiwać więcej niż 10 parametrów w łupinach

+7

Należy pamiętać, że mając 10 parametrów uczynią to dość kłopotliwe. Być może lepiej byłoby zamiast tego użyć opcji (np. '-a 1' lub' --foo = bar'). Zobacz 'man getopt',' man getopts' i 'man bash', aby uzyskać opcje. – Mikel

+5

Ponadto, jeśli wszystko, co chcesz zrobić, to przekazać wszystkie opcje do innego polecenia, możesz użyć '" $ * "' lub '" $ @ "', ale zauważ, że '" $ @ "' jest lepsze, ponieważ robi to dobra rzecz z białymi znakami. – Mikel

Odpowiedz

107

Użyj nawiasów klamrowych, aby ustawić je:

echo "${10}" 

You można również iteracyjne nad parametrów pozycyjnych tak:

for arg 

lub

for arg in "[email protected]" 

lub

while (($# > 0)) # or [ $# -gt 0 ] 
do 
    echo "$1" 
    shift 
done 
+0

i spróbuj 'help shift' –

+0

Pamiętaj, że $ {10} będzie działać w bashu, ale ograniczy twoją przenośność, ponieważ wiele implementacji sh zezwala tylko na jednocyfrowe specyfikacje. –

+0

@William: Istnieje kilka skorup, które go nie zaakceptują, takie jak oryginalna starsza skorupa Bourne'a, ale oprócz powłok wymienionych w innym komentarzu (Bash, dash, ksh i zsh), działa również w csh, popiół tcsh i Busybox. –

16

Można mieć maksymalnie 255 parametrów z:

${255} 
+2

Myślę, że ten limit zależy od powłoki. Bash, dash, ksh i zsh wydają się nie mieć tego. 'sh -c 'echo $ {333}'/usr/bin/*' –

+1

Moja powłoka wygodnie idzie do 2 milionów 'set $ (seq 2097152); echo $ {2097152} ' –

Powiązane problemy