De l'usage du caractère d'échappement (Was Re: Question ffmpeg)

Séb Buch unfoundnickname at gmail.com
Jeu 12 Mai 08:07:07 UTC 2011


Bonjour,

On 05/11/2011 10:42 PM, Fred Z. Free wrote:
> ca marche mais sans ls !!!!!!!!
> Mais le problème est que les fichiers avec espace (presque tous) il ne
> les prends pas!

J'en déduis que ça ne marche que moyennement dans ce cas là...
Le problème des espaces est une question récurrente sur la liste (en 
fait dès qu'on commence à utiliser le shell).
Comme, c'est le matin, que je suis à peu près réveillé et de bonne 
humeur (et surtout que j'ai 10 minutes devant moi), je vais essayer de 
faire un petit blabla pour expliquer les choses.
Prenons comme exemple la commande suivante:

toto mon dossier/mon fichier

Le problème est de savoir comment est interprété "mon dossier/mon 
fichier"? Comme un seul argument (ce qu'on voudrait ici) ou comme 3 
arguments différents?
En fait, le shell découpe la ligne de commande à partir des espaces, ce 
qui donne ici:

"toto", "mon", "dossier/mon", "fichier"

Le premier élément correspond à une commande et tous les autres vont 
être passés à la commande comme des arguments... Sauf que ce n'est pas 
ça que l'on veut.
Si on veut que le shell ne tronçonne pas un espace, on peut (par 
exemple) placer un caractère d'échappement 
(http://fr.wikipedia.org/wiki/Caract%C3%A8re_d%27%C3%A9chappement) 
devant lui.
En l'occurrence, le caractère d'échappement est "\"; ce qui donne:

toto mon\ dossier/mon\ fichier

qui sera tronçonné en:

"toto" et "mon dossier/mon fichier"

ce qui correspond bien à ce qu'on le veut.

Une fois qu'on sait ça, on peut corriger les commandes/scripts qu'on a 
copié/collé puis exécuté sans les avoir regardé de près. :)

Séb




Plus d'informations sur la liste de diffusion ubuntu-fr