Come gestire più di 10 parametri nella shell


101

Sto usando la shell bash su Linux e desidero utilizzare più di 10 parametri nello script di shell


8
Nota che avere 10 parametri lo renderà piuttosto confuso. Forse sarebbe meglio usare le opzioni (ad esempio -a 1o --foo=bar) invece. Vedi man getopt, man getoptse man bashper alcune opzioni per farlo.
Mikel

Risposte:


158

Usa le parentesi graffe per metterli in risalto:

echo "${10}"

Puoi anche iterare sui parametri posizionali in questo modo:

for arg

o

for arg in "$@"

o

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

2
Nota che $ {10} funzionerà in bash, ma limiterà la tua portabilità poiché molte implementazioni di sh consentono solo specifiche a una cifra.
William Pursell

1
@ William: ci sono alcune shell che non la accettano, come la shell Bourne legacy originale, ma oltre alle shell che ho elencato in un altro commento (Bash, dash, ksh e zsh), funziona anche in csh, tcsh e Busybox ash.
In pausa fino a nuovo avviso.

1
@WilliamPursell ${10}è definito da POSIX
Steven Penny

2
Preoccuparsi di ${10}lavorare è necessario solo quando si utilizzano implementazioni molto vecchie che non sono conformi agli standard. Probabilmente solo di interesse storico ... eppure devo ancora usarlo! Suppongo perché le migliori pratiche impongono che 10 argomenti siano troppi a meno che non vengano ripetuti, nel qual caso si itererà su di essi "$@"anziché enumerarli.
William Pursell

22

Puoi avere fino a 256 parametri da 0 a 255 con:

${255}

5
Penso che quel limite dipenda dalla shell. Bash, dash, ksh e zsh non sembrano averlo. sh -c 'echo ${333}' /usr/bin/*
In pausa fino a nuovo avviso.

3
Il mio guscio sale comodamente a 2 milioniset $(seq 2097152); echo ${2097152}
Steven Penny
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.