Re: [Résolu] Manuel simple pour apprendre les scripts bash
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 <lemrichard@yahoo.com>
> 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
Reply to: