Bonjour à la communauté,
Je rencontre un petit soucis qui me gêne et que je n'arrive pas à expliquer.
Plutôt qu'un long discours, je vous laisse regarder.
J'ai une commande, qui quand je l'exécute directement dans bash me donne :
echo "status" | nc -q 1 127.0.0.1 4730
createVPNUser 0 0 1
stop_createVPNUser_1 0 0 1
.
On constate donc qu'il y a 3 lignes, c'est confirmé si j'affiche en hexa :
echo "status" | nc -q 1 127.0.0.1 4730 | hexdump -C
00000000 63 72 65 61 74 65 56 50 4e 55 73 65 72 09 30 09 |createVPNUser.0.|
00000010 30 09 31 0a 73 74 6f 70 5f 63 72 65 61 74 65 56 |0.1.stop_createV|
00000020 50 4e 55 73 65 72 5f 31 09 30 09 30 09 31 0a 2e |PNUser_1.0.0.1..|
00000030 0a |.|
00000031
Maintenant, si je veux mettre ce retour de commande dans une variable, comme ceci :
test=$(echo "status" | nc -q 1 127.0.0.1 4730)
Et que j'affiche $test avec echo, les tabulations et retours de lignes sont remplacés par de simples espaces !
echo $test | hexdump -C
00000000 63 72 65 61 74 65 56 50 4e 55 73 65 72 20 30 20 |createVPNUser 0 |
00000010 30 20 31 20 73 74 6f 70 5f 63 72 65 61 74 65 56 |0 1 stop_createV|
00000020 50 4e 55 73 65 72 5f 31 20 30 20 30 20 31 20 2e |PNUser_1 0 0 1 .|
00000030 0a |.|
00000031
Comment cela se fait-il ? Je n'ai jamais rencontré ce problème avec d'autres commandes…
Quelqu'un a une idée ?
# classique
Posté par eric gerbier (site web personnel) . Évalué à 3.
il suffit de mettre des quotes :
echo "$test"
[^] # Re: classique
Posté par Kerro . Évalué à 3.
Pour compléter, ce n'est pas echo qui est en cause, mais le shell.
Une variable sans guillemets est affichée sur une seule ligne : http://abs.traduc.org/abs-5.0-fr/ch05.html
# Cela ne dépend pas de la commande
Posté par Gauthier Monserand (site web personnel) . Évalué à 2.
# Using echo to output an unquoted variable…
Posté par MicP . Évalué à 2.
http://tldp.org/LDP/abs/html/commandsub.html : "Chapter 12. Command Substitution"
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.