Bash : comportement que je ne comprends pas

gnugo -  
dubcek Messages postés 18702 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un problème que je n'arrive pas à résoudre car je ne comprends pas ce qui se passe :

j'ai besoin d'avoir une liste de fichiers, chacun sur une ligne.

Quand je fais ls | cat , j'obtiens bien une liste avec un fichier par ligne
mais si je fais aa=$(ls | cat) puis echo $aa, toute la liste est sur une seule ligne... je ne comprends pas pourquoi...echo supprime les sauts de ligne ?
Même comportement avec un cat<<<$(ls) , je suis bloqué

Pouvez-vous m'expliquer ce qui se passe?
MERCI
A voir également:
  • Bash : comportement que je ne comprends pas
  • Bingo bash free - Télécharger - Divers Jeux
  • Bash retour à la ligne - <a href="https://forums.commentcamarche.net/forum/shell-287">Forum Shell</a>
  • Bash pause - <a href="https://forums.commentcamarche.net/forum/shell-287">Forum Shell</a>
  • Bash addition - <a href="https://forums.commentcamarche.net/forum/programmation-3">Forum Programmation</a>
  • Bash do while - <a href="https://forums.commentcamarche.net/forum/shell-287">Forum Shell</a>

3 réponses

dubcek Messages postés 18702 Date d'inscription   Statut Contributeur Dernière intervention   5 658
 
hello
pour afficher les lignes dans une variable, utiliser des "" :
echo "$var"
pour que ls affiche 1 fichier par ligne :
ls -1
0
gnugo
 
Effectivement, je viens tout juste de constater ça aussi.
Donc la transformation se produit dès qu'on utilise une variable avec multiples lignes sans mettre de guillemets?
Merci en tt cas
0
dubcek Messages postés 18702 Date d'inscription   Statut Contributeur Dernière intervention   5 658
 
avec des "" la variable est affichée littéralement
$ b="a          b"   
$ echo $b   
a b   
$ echo "$b"   
a          b      
$ a="1  
> 2"  
$ echo $a  
1 2  
$ echo "$a"  
1  
2  
0