Comment gérer plus de 10 paramètres dans le shell

101

J'utilise bash shell sur Linux et je souhaite utiliser plus de 10 paramètres dans le script shell

Ashitosh
la source
8
Notez que le fait d'avoir 10 paramètres rendra les choses assez déroutantes. Il vaudrait peut-être mieux utiliser des options (par exemple -a 1ou --foo=bar) à la place. Voir man getopt, man getoptset man bashpour quelques options pour le faire.
Mikel

Réponses:

158

Utilisez des accolades pour les mettre en valeur:

echo "${10}"

Vous pouvez également parcourir les paramètres de position comme ceci:

for arg

ou

for arg in "$@"

ou

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done
Suspendu jusqu'à nouvel ordre.
la source
2
Notez que $ {10} fonctionnera dans bash, mais limitera votre portabilité car de nombreuses implémentations de sh n'autorisent que des spécifications à un chiffre.
William Pursell
1
@William: Il y a des shells qui ne l'acceptent pas, comme le shell Bourne hérité d'origine, mais en plus des shells que j'ai listés dans un autre commentaire (Bash, dash, ksh et zsh), cela fonctionne aussi dans csh, tcsh et Busybox ash.
Suspendu jusqu'à nouvel ordre.
1
@WilliamPursell ${10}est défini par POSIX
Steven Penny
2
Se soucier du ${10}travail n'est nécessaire que lors de l'utilisation de très anciennes implémentations non conformes aux standards. Probablement d'intérêt historique ... et pourtant je ne l'ai jamais utilisé! Je suppose que parce que les meilleures pratiques dictent que 10 arguments sont bien trop nombreux à moins qu'ils ne soient répétés, auquel cas vous allez les parcourir "$@"plutôt que de les énumérer.
William Pursell
22

Vous pouvez avoir jusqu'à 256 paramètres de 0 à 255 avec:

${255}
Lukuluku
la source
5
Je pense que cette limite dépend de la coque. Bash, dash, ksh et zsh ne semblent pas l'avoir. sh -c 'echo ${333}' /usr/bin/*
Suspendu jusqu'à nouvel ordre.
3
Ma coquille monte confortablement à 2 millionsset $(seq 2097152); echo ${2097152}
Steven Penny