doubles quotes dans une option

Vincent Lefevre vincent at vinc17.org
Thu Jan 17 14:35:54 CET 2013


Bonjour,

On 2013-01-17 14:07:30 +0100, Daniel Caillibaud wrote:
> Une question bête sur laquelle je sèche : comment mettre des doubles
> quotes dans une variable bash qui va servir comme option d'une autre
> commande ?
> 
> Un exemple simple pour illustrer
> 
> bash
> OPT="--format=\"commas\""
> echo $OPT
> --format="commas"

Voilà, comme cela. Mais le problème, c'est qu'en général...

> ls $OPT
> # ls: invalid argument `"commas"' for `--format'

Il ne faut *pas* de quotes: --format=commas

Car le but des quotes est d'être interprétés par le shell, pas à être
passés dans l'argument.

En particulier, les quotes servent à "protéger" les espaces, pour
qu'ils soient considérés comme faisant partie de l'argument et non
pas séparer deux arguments.

Je pense que ton problème est maintenant: comment différencier les
espaces séparant les options des espaces faisant partie d'une valeur
d'une option. Soit c'est prévu par l'utilitaire qui va lire la
variable d'environnement (voir au cas par cas), soit si tu passes
toi-même la variable dans un script, il faut un système pour la
réévaluer par le shell (dans ce cas, les quotes sont utiles): c'est
le but de l'utilitaire eval.

>   pas mieux avec
> OPT="--format=\\"commas\\""
>   ou
> OPT="--format='commas'"
>   ou
> cmd="ls $OPT"
> $cmd
> $($cmd)
> `$cmd`

eval ls $OPT

-- 
Vincent Lefèvre <vincent at vinc17.net> - Web: <http://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)


More information about the Shell mailing list