Pourquoi n'y a-t-il pas une nouvelle ligne à la fin de la citation d'un sous-shell et de la transmission des résultats à l'écho?

9

Quand je fais ls | grep pngla sortie de grep c'est:

2015-05-15-200203_1920x1080_scrot.png 
2015-05-16-025536_1920x1080_scrot.png

(nom de fichier, nouvelle ligne, nom de fichier, nouvelle ligne)

puis, echo $(ls | grep png)sort:

2015-05-15-200203_1920x1080_scrot.png 2015-05-16-025536_1920x1080_scrot.png

(nom de fichier, espace du fractionnement de mots, nom de fichier, nouvelle ligne !! de l'écho !!)

C'est tout ok, mais quand je fais cela pour empêcher le fractionnement du mot:, echo "$(ls | grep png)"la sortie est:

2015-05-15-200203_1920x1080_scrot.png 
2015-05-16-025536_1920x1080_scrot.png

Et ma question est, où est la deuxième nouvelle ligne (une devrait être de grep et une d'écho)?

MichalH
la source

Réponses:

8

C'est la nouvelle ligne de echo, vous pouvez vérifier en utilisant echo -npour supprimer la nouvelle ligne de fin:

echo -n "$(ls | grep png)"

La substitution de commandes supprime toutes les nouvelles lignes de fin, la dernière nouvelle ligne a été ajoutée par echo, grepn'a rien à voir ici.

cuonglm
la source
"La substitution de commandes supprime toutes les nouvelles lignes" - c'est tout! Merci
MichalH