_kal_ a écrit :
Merde alors, j'été persuadé que mettre des guillemets corigeait le problème. En fait, c'est l'utilisation aussi du masque * au lieu de `ls` qui fait que ca marche comme on veu. Peux tu m'expliquer pourquoi, je vois pas trop la ...
|
Le shell execute le code dans cet ordre : substitution de commande, puis word splitting, puis pathname expansion.
1) ls est exécuté.
2) `ls` est remplacé par la sortie de cette exécution (ici, une liste de deux mots, "baz" et "foo bar" ).
3) Le shell procède au word splitting en utilisant l'IFS. Par défaut l'IFS contient l'espace, la tablature et le retour à la ligne (je ne sais plus l'ordre des deux derniers, mais bref). On a donc trois mots : baz, foo, bar.
Ça ne marche pas.
On veut donc éviter l'étape 3. Pour cela, on peut enlever l'espace de l'IFS : lors de l'étape du word splitting, "foo bar" ne sera plus découpé en deux mots, et notre code fonctionnera alors correctement.
1) Le shell procède au word splitting. Il n'y a qu'un caractère, '*', donc comme l'IFS par défaut ne contient pas '*', il ne se passe rien.
2) Le shell remplace '*' par la liste des fichiers du répertoire courant. Ici, une liste de deux mots, "baz" et "foo bar".
Ça marche !