[gull] Truc et astuces: Jouons avec ``eval'' et bash
Félix Hauri
felix at f-hauri.ch
Sat Oct 6 14:10:14 CEST 2007
On Sat, Oct 06, 2007 at 11:33:01AM +0200, Gregoire Galland wrote:
> Heu... pas tout compris à ton script,
>
Hem ce sont des lignes, à copier *sans* le ``$'' (qui repère le prompt).
> il me fait des erreur d'exécution.
A quel moment (ligne)?
> Félix Hauri wrote:
> > $ echo $str
> >
> >
> > $ str=$(eval echo -e $(printf '\\\\%o,' $(seq 65 90)) |
> > sed 's/^/{/;s/,$/}/')
> >
> > $ echo $str
> > {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
> >
> > $ eval echo $str
> > A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
> >
> > $ eval "printf '%s\n' $str\ $str\ $str" | wc
> > 17576 52728 105456
> >
> > $ echo 'a=26^3;a;a*3;a*6' | bc -l | xargs printf "%7d %7d %7d\n"
> > 17576 52728 105456
> >
> > $ eval "printf '%s\n' $str\ $str\ $str\ $str"
> >
> Pour le problème dont je t'avais parlé l'autre soir (problème
> d'exécution de commande dans un script), j'ai trouvé le bug: je
> manipulais la variable d'environnement $IFS, et c ça qui foutait la merde.
:->
C'est autant rigolo que délicat de jouer avec IFS. Personellement,
j'essaie de systématiquement `èncapsuler'' les séquences dans
lesquelles je prend ce genre de risques dans un sous-shell, défini
entre parenthèses, afin de conserver mon environnement en dehors.
Pour jouer avec IFS:
$ str=$(eval "echo -e '{$(printf '\%o,' $(seq 65 90)|sed s/,$//)}'")
$ liste=($(eval echo $str$str))
$ (export IFS=','; echo "${liste[*]}")
AA,AB,AC,AD,AE,AF,AG,...
...
...,ZV,ZW,ZX,ZY,ZZ
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list