Bash : comportement que je ne comprends pas

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

3 réponses

  1. Contributeur
    hello
    pour afficher les lignes dans une variable, utiliser des "" :
    echo "$var"
    
    pour que ls affiche 1 fichier par ligne :
    ls -1
    0
    1. 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
      1. Contributeur
        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