[SSFR] Re: [SSFR] Re: [SSFR] [zsh] role guillemets doubles dans les expansions ?

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


On 2005-06-13 11:15:19 -0000, Bruno Bonfils wrote:
> Le lun 13 juin, marc chantreux a écrit :
> > % cat comprendre
> > this
> > is
> > a
> > test
> > 
> > % foreach l (  ${(f)"$(< comprendre )"} ) { print $l }
> > this
> > is
> > a
> > test
> > 
> > % foreach l (  ${(f)$(< comprendre )} ) { print $l }
> 
> Je pense qu'il te manque un « this is a test » en resultant a cette
> boucle,

Oui.

> quoiqu'il en soit, pourquoi tu n'utilise pas tout simplement :
> 
> % foreach l (  ${$(< comprendre )} ) { print $l }
> this
> is
> a
> test

Tout dépend de ce qu'on veut. La page man zshexpn(1) donne quelques
explications:

   Examples
       The  flag  f is useful to split a double-quoted substitution
       line by line.  For example, ${(f)"$(<file)"} substitutes the
       contents  of file divided so that each line is an element of
       the resulting  array.   Compare  this  with  the  effect  of
       $(<file)  alone,  which divides the file up by words, or the
       same inside double quotes, which makes the entire content of
       the file a single string.

Pour foreach l (  ${(f)$(< comprendre )} ) { print $l }, je suppose
que le (f) a pour premier effet de transformer le tableau en chaîne
comme avec:

  foreach l ( ${(j: :)$(< comprendre )} ) { print $l }

Du coup, il n'y a qu'une seule ligne.

D'autre part, je conseillerais de quoter le $l en "$l" au cas où.
Je ne sais pas s'il peut y avoir une différence ici, mais je pense
que c'est une bonne habitude à prendre (notamment dans un contexte
de compatibilité sh).

-- 
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/