2009-06-24 6 views
0

j'ai deux variables:variables d'impression d'écho sur une seule ligne

export portNumber=8888^M 
export loginIP_BASE=10.1.172.2^M 

Je suis en train de les imprimer à la fois sur une seule ligne séparés par deux points « : ». Il devrait ressembler à "10.1.172.2:8888"

echo -n 'Login IP:' 
echo -n $loginIP_BASE 
echo -n ':' 
echo $portNumber 

mais il imprime ceci:

:8888 IP:10.1.172.2 

Pourquoi est-il fait cela? Comment puis-je l'obtenir pour faire ce que je veux?

En outre, les variables sont préexistantes d'un autre fichier, donc je ne les ai pas écrire moi-même. Que fait le "^ M"?

Répondre

1

Le fichier a été transféré à partir de Windows en mode binaire, et a encore des caractères de retour chariot aux extrémités des lignes. Ils sont les symboles ^M et ils font revenir la position du texte au début de la ligne lorsque les valeurs sont affichées. Le retour chariot à la fin de la première valeur affiche la deuxième valeur au début de la ligne. la ligne à nouveau, en écrasant une partie de la première valeur.

Le droit fixe est de transférer le fichier à partir de Windows en utilisant le transfert en mode texte, ou pour exécuter dos2unix sur le fichier une fois que vous avez transféré il. (Ou si le fichier ne sera pas transféré à nouveau à partir de Windows, il suffit de supprimer les caractères ^M!)

2

Dans Windows une nouvelle ligne typique est \ r \ n (dans les systèmes * nix est juste \ n).

\ r est un retour chariot.

\ n est nouvelle ligne.

^M est \ r, donc après avoir écrit loginIP_BASE $ vous êtes à la position 0 de la ligne réelle.

Si vous voulez supprimer tous les^M vous pouvez le faire dans vim o avec sed en utilisant:

sed s/{ctrl+v}{ctrl+m}// file > new_file 

({Ctrl + v} signifie appuyer sur ctrl puis v)

0

Utilisez la commande dos2unix:

dos2unix filename 

Une autre astuce pour supprimer Ctrl + M dans l'éditeur vi:

:%s/^V^M//g 
Questions connexes