82 votes

Comment obtenir le nième argument de position en bash?

Comment obtenir le n-ième argument de position en Bash, où n est une variable ?

123voto

Dennis Williamson Points 105818

Utilisez la fonctionnalité d'indirection de Bash :

#!/bin/bash
n=3
echo ${!n}

Exécution du fichier :

$ ./ind pomme banane melon dattes

Produit :

melon

Éditer :

Vous pouvez également effectuer une découpe d'array :

echo ${@:$n:1}

mais pas d'indications de tableau :

echo ${@[n]}  # NE FONCTIONNERA PAS

1 votes

@AlexanderOleynikov Cela provoque une erreur de "mauvaise substitution"; je suppose que @ (et *) sont des "Paramètres Spéciaux" et qu'ils ne sont pas des noms de tableau valides ? ${@} fait référence aux paramètres numérotés, mais @ n'est pas un tableau et le support n'est pas implémenté pour le traiter en tant que tel, alors que par exemple "${unsetvariable}" produirait une sortie vide car c'est un nom de tableau/variable valide, juste pas encore défini (et ces exceptions sont spécialement gérées dans le code source de bash, je suppose). J'ai essayé de trouver une meilleure explication dans man bash, mais la recherche des @ m'a fait perdre patience. ;P

0 votes

En zsh, la dernière option fonctionne (parce que pourquoi ne fonctionnerait-elle pas).

13voto

Johannes Weiß Points 19013

Si N est enregistré dans une variable, utilisez

eval echo \${$N}

si c'est une constante, utilisez

echo ${12}

car

echo $12

ne signifie pas la même chose !

2 votes

Quelle est la différence entre ${12} et $12 ?

3 votes

Bonjour @HelloGoodbye, $12 signifie $1 et le caractère 2. ${12} signifie le 12ème paramètre.

7voto

Alex Barrett Points 7719
$1 $2 ... $n

$0 contient le nom du script.

0voto

Zen Points 359

Comme vous pouvez le voir dans le Bash par l'exemple, vous avez simplement besoin d'utiliser les variables automatiques $1, $2, et ainsi de suite.

$# est utilisé pour obtenir le nombre d'arguments.

-2voto

rahul Points 84185

Lire

Gestion des paramètres positionnels

et

Expansion de paramètres

$0 : le premier paramètre positionnel

$1 ... $9 : les éléments de la liste d'arguments de 1 à 9

0 votes

Cette réponse ne répond pas à la question originale de l'OP. Il a spécifiquement demandé comment obtenir un paramètre par son index stocké dans une variable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X