[bash sh] Plus de .retour chariot script

Le
Qu'est ce qu'elle a ma gueule ?
bonjour

quelqu'un peu m'expliquer pourquoi quand je fait un "ls -al" j'ai les
retour chariot alors que dans un bash script un :
list=ls -al
echo $list
les retour chariot ne sont plus présent et que tout s'affiche sur une
seule ligne ?

Merci de vos lumieres



--
Le politiquement correct me fait gerber.
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
yamo'
Le #23725331
Salut,

Qu'est ce qu'elle a ma gueule ? a tapoté, le 04/09/2011 14:35:
quelqu'un peu m'expliquer pourquoi quand je fait un "ls -al" j'ai les
retour chariot alors que dans un bash script un :
list=ls -al
echo $list
les retour chariot ne sont plus présent et que tout s'affiche sur une
seule ligne ?




D'après :
En faisant :


list=`ls -al`
echo "$list"


Tu auras les retours chariots.

Au fait, chez moi la commande :
list=ls -al
renvoie une erreur : Commande « -al » non trouvée


--
Stéphane


L'administration est un lieu ou les gens qui arrivent en retard croisent
dans l'escalier ceux qui partent en avance.
-+- Georges Courteline -+-
Qu'est ce qu'elle a ma gueule ?
Le #23725661
On Sun, 04 Sep 2011 15:14:02 +0200, yamo' wrote:

Salut,

Qu'est ce qu'elle a ma gueule ? a tapoté, le 04/09/2011 14:35:
quelqu'un peu m'expliquer pourquoi quand je fait un "ls -al" j'ai les
retour chariot alors que dans un bash script un :
list=ls -al
echo $list
les retour chariot ne sont plus présent et que tout s'affiche sur une
seule ligne ?




D'après :
En faisant :


list=`ls -al`
echo "$list"



C'est bon ça marche.

Tu auras les retours chariots.

Au fait, chez moi la commande :
list=ls -al
renvoie une erreur : Commande « -al » non trouvée



Normal, c'est dans un bash script.
al sont des option de ls

Merci.




--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Francois Lafont
Le #23725651
Bonjour,

Personnellement pour la substitution de commande je préfère :

list=$(ls -al)
echo $list

Sinon, pour l'explication, cela vient de ce que la page de manuel du
bash appelle le "word Splitting" dans la partie "EXPANSION".

Après la ligne 1, le paramètre list contient bien les caractères fin de
ligne. Dans la ligne 2, à cause de « $list », il y a dans un premier
temps une « expansion de paramètre » et $list est bien « développée »
avec les fins de ligne.

Mais ensuite, avant d'exécuter echo, le shell scanne le résultat de
cette expansion pour le découper en mots/tokens (le shell n'exécute rien
tant qu'il n'a pas découpé les instructions en mots/tokens, un peu comme
LaTeX). Et pour faire ce découpage en mots, le shell utilise comme
délimiteur la variable d'environnement IFS (qui contient en principe
"<space><tab><newline>"). Du coup, les sauts de lignes vont juste servir
de délimiteur et chaque ligne sera un argument de la commande echo. Or,
echo va afficher ses arguments en les séparant par un espace, car c'est
ce que fait echo sous bash (voir là aussi la page man).

Bref, toutes les explications se trouvent dans $(man bash) dans la
partie "EXPANSION" et plus précisément tu peux chercher la sous partie
"Word Splitting". Mais ce sont des mécanismes pas toujours simples je
trouve. En revanche, ce qu'il faut retenir, c'est que s'il on veut
utiliser le contenu d'un paramètre sans avoir des pertes de caractères
de $IFS, il faut utiliser les doubles quotes qui font perdre aux
caractères $IFS leur spécificité.

J'espère que je n'ai pas dit trop de bêtises. :-)



--
François Lafont
Publicité
Poster une réponse
Anonyme