Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/07/2011, 16h45   #1
Membre du Club
 
Inscription : juillet 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 166
Points : 61
Points : 61
Par défaut [bash] syntaxe "for x in {a..b}" utilisable uniquement avec des entiers constants ?

Bonjour.

Je veux boucler sur une suite de valeurs consécutives et cette syntaxe me semble être la plus appropriée.
Je connais aussi la syntaxe for((e1;e2;e3)), mais elle est plus verbeuse et trop "overkilled" pour ce besoin.

Mais sauf erreur de ma part, seuls les nombres entiers constants semblent être acceptés avec cette syntaxe.

J'ai essayé ceci :

for x in {2..`$numFiles`} et for x in {2..$($numFiles)}

Ai je fait une erreur ou seuls les entiers constants sont autorisés ?

Si seuls les entiers constants sont autorisés je sais utiliser Seq, mais c'est un peu plus verbeux.
AnozerOne est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/07/2011, 17h20   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

La substitution de commande ne sert à rien ici.

Effectivement, une expression de série (Développement des accolades) ne peut comporter que des entiers constants, parce que "Le développement des accolades est effectué avant tout autre développement[...]"
cependant, il est possible d'utiliser des variables grâce à eval, mais bon
dans ce cas là, en BASH, le mieux reste for ((e1;e2;e3))
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 02/07/2011, 17h51   #3
Membre du Club
 
Inscription : juillet 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 166
Points : 61
Points : 61
Ok, merci.

Par curiosité c'est quoi au juste la syntaxe d'eval, j'ai essayé ceci :

Code :
1
2
3
      for x in {2..eval "$numFiles"}
         do echo $numFiles
      done
Mais alors que numFiles a pour valeur "7", "7" ne s'affiche que 2 fois sur la sortie standard au lieu de 6 fois.
AnozerOne est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/07/2011, 16h53   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

Ce que j'en sais est beaucoup plus moche :
Code :
for item in $(eval echo {$debut..$fin}); do...;done
il est donc mieux, en BASH, d'en rester à ce qui a été préconisé, et pour un shell POSIX, d'utiliser une boucle while et une incrémentation à l'intérieur.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/07/2011, 17h50   #5
Membre du Club
 
Inscription : juillet 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 166
Points : 61
Points : 61
Ok, merci.
AnozerOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h12.


 
 
 
 
Partenaires

Hébergement Web