Jak obsługiwać więcej niż 10 parametrów w powłoce


103

Używam powłoki bash w systemie Linux i chcę użyć więcej niż 10 parametrów w skrypcie powłoki


8
Zauważ, że posiadanie 10 parametrów sprawi, że będzie to dość zagmatwane. Być może zamiast tego lepiej byłoby użyć opcji (np. -a 1Lub --foo=bar). Zobacz man getopt, man getoptsi man bashkilka opcji, jak to zrobić.
Mikel

Odpowiedzi:


160

Użyj nawiasów klamrowych, aby je podkreślić:

echo "${10}"

Możesz również iterować po parametrach pozycyjnych w następujący sposób:

for arg

lub

for arg in "$@"

lub

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

2
Zwróć uwagę, że $ {10} będzie działać w bashu, ale ograniczy przenośność, ponieważ wiele implementacji sh dopuszcza tylko jednocyfrowe specyfikacje.
William Pursell

1
@William: Jest kilka powłok, które tego nie akceptują, na przykład oryginalna starsza powłoka Bourne'a, ale oprócz powłok, które wymieniłem w innym komentarzu (Bash, dash, ksh i zsh), działa również w csh, tcsh i popiół Busybox.
Wstrzymano do odwołania.

1
@WilliamPursell ${10}jest zdefiniowany przez POSIX
Steven Penny

2
Martwienie się o ${10}pracę jest konieczne tylko w przypadku używania bardzo starych implementacji, które nie są zgodne ze standardami. Prawdopodobnie tylko o znaczeniu historycznym ... a jednak nigdy go nie użyłem! Przypuszczam, że ponieważ najlepsza praktyka mówi, że 10 argumentów to zdecydowanie za dużo, chyba że zostaną powtórzone, w takim przypadku będziesz je powtarzać, "$@"a nie wyliczać.
William Pursell,

23

Możesz mieć do 256 parametrów od 0 do 255 z:

${255}

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

3
Moja skorupa wygodnie rośnie do 2 milionówset $(seq 2097152); echo ${2097152}
Steven Penny
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.