for i in "1 2 3 4 5 6" ;
do
echo ${$i} # <-- ici ca va pas
done
bref dans un for je veux pouvoir travailler avec les parametres de ma
commande en bouclant sur leur place. Le probleme c'est que j'arrive pas
a faire un truc correct, je me prends des erreurs de substitution.
Est-ce que quelqu'un saurait comment je dois m'y prendre ?
pour info :
$ bash --version
GNU bash, version 3.1.17(9)-release (i686-pc-cygwin)
Copyright (C) 2005 Free Software Foundation, Inc.
bon, je vais surement passer pour un boulet, mais tant pis : mon script, qui s'appelle blah, contient ça : #!/bin/bash
for (( i=1 ; i <= $# ; i++ )) ; do eval echo $$i toto=`eval echo $$i` echo $toto done
------------------------------------------
quand je le lance, j'ai ça : $ ./blah toto tata titi toto 4304i tata 4304i titi 4304i
------------------------------------------
Question : comment je récupère le résultat de l'eval dans une variable ?
Merci (en espérant avoir été clair ? )
Sébastien Monbrun aka TiChou
Dans le message <news:, *George Abitbol* tapota sur f.c.o.l.configuration :
#!/bin/bash
for (( i=1 ; i <= $# ; i++ )) ; do eval echo $$i toto=`eval echo $$i`
L'anti-slash est traité de manière spéciale quand il est à l'intérieur de « backquotes » et qu'il est suivi des méta-caractères , ` et $. Pour que l'anti-slash ne soit pas traité différemment des autres caractères, il faut utiliser la substitution de commande $( ) :
toto=$(eval echo $$i)
echo $toto done
-- Sébastien Monbrun aka TiChou
Dans le message <news:1166115083.050168.289760@f1g2000cwa.googlegroups.com>,
*George Abitbol* tapota sur f.c.o.l.configuration :
#!/bin/bash
for (( i=1 ; i <= $# ; i++ )) ;
do
eval echo $$i
toto=`eval echo $$i`
L'anti-slash est traité de manière spéciale quand il est à l'intérieur de
« backquotes » et qu'il est suivi des méta-caractères , ` et $.
Pour que l'anti-slash ne soit pas traité différemment des autres caractères,
il faut utiliser la substitution de commande $( ) :
Dans le message <news:, *George Abitbol* tapota sur f.c.o.l.configuration :
#!/bin/bash
for (( i=1 ; i <= $# ; i++ )) ; do eval echo $$i toto=`eval echo $$i`
L'anti-slash est traité de manière spéciale quand il est à l'intérieur de « backquotes » et qu'il est suivi des méta-caractères , ` et $. Pour que l'anti-slash ne soit pas traité différemment des autres caractères, il faut utiliser la substitution de commande $( ) :
toto=$(eval echo $$i)
echo $toto done
-- Sébastien Monbrun aka TiChou
Ronald
Le Thu, 14 Dec 2006 08:51:23 -0800, George Abitbol a écrit :
[snip]
bon, je vais surement passer pour un boulet, mais tant pis : mon script, qui s'appelle blah, contient ça : #!/bin/bash
for (( i=1 ; i <= $# ; i++ )) ; do eval echo $$i toto=`eval echo $$i` echo $toto done
J'ai lu le fil, je ne sais pas si j'ai tout compris mais j'y vais de ma petite proposition quand même.
#!/bin/sh for i in $@ ; do echo $i ; toto=$$i ; echo $toto ; done
Le Thu, 14 Dec 2006 08:51:23 -0800, George Abitbol a écrit :
[snip]
bon, je vais surement passer pour un boulet, mais tant pis : mon
script, qui s'appelle blah, contient ça :
#!/bin/bash
for (( i=1 ; i <= $# ; i++ )) ;
do
eval echo $$i
toto=`eval echo $$i`
echo $toto
done
J'ai lu le fil, je ne sais pas si j'ai tout compris mais j'y vais de ma
petite proposition quand même.
#!/bin/sh
for i in $@ ;
do echo $i ;
toto=$$i ;
echo $toto ;
done
Dans le message <news:, *Ronald* tapota sur f.c.o.l.configuration :
#!/bin/sh for i in $@ ;
Gare aux arguments contenant des séparateurs.
for i in "$@"
ou
IFS for i in $@
-- Sébastien Monbrun aka TiChou
George Abitbol
Bonjour,
toto=`eval echo $$i`
L'anti-slash est traité de manière spéciale quand il est à l'int érieur de « backquotes » et qu'il est suivi des méta-caractères , ` et $. Pour que l'anti-slash ne soit pas traité différemment des autres cara ctères, il faut utiliser la substitution de commande $( ) :
toto=$(eval echo $$i)
Merci beaucoup pour la reponse et pour l'explication.
--
Bonjour,
toto=`eval echo $$i`
L'anti-slash est traité de manière spéciale quand il est à l'int érieur de
« backquotes » et qu'il est suivi des méta-caractères , ` et $.
Pour que l'anti-slash ne soit pas traité différemment des autres cara ctères,
il faut utiliser la substitution de commande $( ) :
toto=$(eval echo $$i)
Merci beaucoup pour la reponse et pour l'explication.
L'anti-slash est traité de manière spéciale quand il est à l'int érieur de « backquotes » et qu'il est suivi des méta-caractères , ` et $. Pour que l'anti-slash ne soit pas traité différemment des autres cara ctères, il faut utiliser la substitution de commande $( ) :
toto=$(eval echo $$i)
Merci beaucoup pour la reponse et pour l'explication.
--
George Abitbol
J'ai lu le fil, je ne sais pas si j'ai tout compris mais j'y vais de ma petite proposition quand même.
#!/bin/sh for i in $@ ;
Un peu HS, le truc c'est que je veux pouvoir acceder à mes parametres via leur indice dans le tebleau $@, d'où la boucle entre 1 et $#
do echo $i ;
toto=$$i ;
ca par contre c'est pas le comportement attendu, mon but etant de passer la valeur de l'argument dans la variable toto. Dans une boucle sur $@, ca serait tout simplement toto=$i
echo $toto ; done
Merci pour ta contribution.
--
J'ai lu le fil, je ne sais pas si j'ai tout compris mais j'y vais de ma
petite proposition quand même.
#!/bin/sh
for i in $@ ;
Un peu HS, le truc c'est que je veux pouvoir acceder à mes parametres
via leur indice dans le tebleau $@, d'où la boucle entre 1 et $#
do echo $i ;
toto=$$i ;
ca par contre c'est pas le comportement attendu, mon but etant de
passer la valeur de l'argument dans la variable toto. Dans une boucle
sur $@, ca serait tout simplement
toto=$i
J'ai lu le fil, je ne sais pas si j'ai tout compris mais j'y vais de ma petite proposition quand même.
#!/bin/sh for i in $@ ;
Un peu HS, le truc c'est que je veux pouvoir acceder à mes parametres via leur indice dans le tebleau $@, d'où la boucle entre 1 et $#
do echo $i ;
toto=$$i ;
ca par contre c'est pas le comportement attendu, mon but etant de passer la valeur de l'argument dans la variable toto. Dans une boucle sur $@, ca serait tout simplement toto=$i