Mercredi 15 juin 2005, 16:12:13 CEST, Fr�d�ric BOITEUX a �crit :
> 
> Le Wed, 15 Jun 2005 09:34:16 -0400, Richard Lemay <[EMAIL PROTECTED]>
> a �crit :
> 
> > J'ai fais un peu de lecture et j'ai construit le script suivant qui 
> > fonctionne bien:
> > 
> > 
> > #!/bin/sh
> > case "$1" in
> > 
> > "") /home/apps/acrobat-reader/bin/acroread
> > ;;
> > 
> > *) /home/apps/acrobat-reader/bin/acroread "$1"
> > ;;
> > 
> > esac
> 
> Oui, mais si tu as plusieurs fichiers en arguments ?
> 
> > Sauf que cette commande (acroread ${1+"$@"} m'intrigue. Elle semble 
> > faire exactement ce que je veux en une ligne. Je vais devoir trouver
> > de  la documentation pour me l'expliquer :).
> 
> Elle fait je crois exactement ce que tu veux, mais c'est assez
> illisible. C'est une formule "connue" que j'avais p�ch� dans un script,
> et que je garde  sous le coude. Mais je n'en ai pas vu d'explication
> dans la page manuel de 'bash'...

Mais si on la trouve, dans la section � EXPANSION �, sous-section
� remplacement des param�tres �. (En anglais : EXPANSION/Parameter
expansion.)

Voil� un r�sum� : 
${1+"$@"} = si $1 n'existe pas, on ne met rien, sinon on met "$@"
($@ = tous les arguments, les guillemets permettent de prot�ger les
arguments un par un (c'est comme si on �crivait "$1" "$2" ...)).

(� noter que, normalement, c'est ${1:+"$@"}.)

En g�n�ral, "$@" me suffit. Je ne me souviens pas avoir eu de probl�me
s'il n'y avait pas du tout d'argument.

La gestion des guillemets est toujours assez... amusante... � comprendre.

for f in *.txt; do cat $f; done

for f in "*.txt"; do cat $f; done

for f in *.txt; do cat "$f"; done

for f in "*.txt"; do cat "$f"; done

Et si on y ajoute les ''... ;oP

-- 
Sylvain Sauvage

Répondre à