La concaténation de deux variables de chaîne de caractères dans un bash ajout de saut de ligne
J'ai une variable final_list
qui est apposée par une variable url
dans une boucle tant que:
while read url; do
final_list="$final_list"$'\n'"$url"
done < file.txt
À ma grande surprise, le \n
est ajouté comme un espace, de sorte que le résultat est:
url1 url2 url3
alors que je voulais:
url1
url2
url3
Quel est le problème?
OriginalL'auteur Aman Deep Gautam | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
De nouvelles lignes sont très présentes dans la variable
"$final_list"
.echo
comme ça avec des guillemets doubles:OU une meilleure utilisation
printf
:La citation est de la plus haute importance dans les shells Unix. Sans les guillemets shell ne s'applique pas à toute extension des règles et des friandises de nouvelles lignes de l'espace.
Sans les guillemets, tout espace blanc (y compris les retours à la ligne) dans l'expansion de
$final_list
est considéré comme un séparateur de mots, et non pas littérale des caractères à imprimer.echo
ne reçoit que 3 arguments, les Url. Avec des citations,echo
reçoit qu'un seul argument, la chaîne de caractères qui contient les url et les retours à la ligne qui les séparent.Merci pour une excellente explication.
OriginalL'auteur anubhava
Il peut dépendre de la façon dont vous essayez d'afficher le résultat final. Essayez résultant de la transmission de la variable à l'intérieur des guillemets:
OriginalL'auteur Emo Mosley