eco stampa variabili su una sola riga
Domanda
Ho due variabili:
export portNumber=8888^M
export loginIP_BASE=10.1.172.2^M
Sto provando a stamparli entrambi su un'unica riga separata da due punti ':'. Dovrebbe apparire come "10.1.172.2: 8888"
echo -n 'Login IP:'
echo -n $loginIP_BASE
echo -n ':'
echo $portNumber
ma stampa invece questo:
:8888 IP:10.1.172.2
Perché lo sta facendo? Come posso farlo fare quello che voglio?
Inoltre, le variabili sono preesistenti da un altro file, quindi non le ho scritte io. Cosa significa il " ^ M " fare?
Soluzione
Il file è stato trasferito da Windows in modalità binaria e ha ancora caratteri di ritorno a capo alle estremità delle linee.
Sono i tuoi simboli ^ M
e fanno sì che la posizione del testo ritorni all'inizio della riga quando vengono visualizzati i valori: il ritorno a capo alla fine del primo valore rende il il secondo valore viene visualizzato di nuovo all'inizio della riga, sovrascrivendo parte del primo valore.
La correzione giusta è trasferire il file da Windows usando il trasferimento in modalità testo o eseguire dos2unix sul file dopo averlo trasferito. (O se il file non verrà nuovamente trasferito da Windows, basta eliminare i caratteri ^ M
!)
Altri suggerimenti
In Windows una nuova linea tipica è \ r \ n (nei sistemi * nix è solo \ n).
\ r è il ritorno a capo.
\ n è una nuova riga.
^ M è \ r , quindi dopo aver scritto $ loginIP_BASE sei nella posizione 0 della riga effettiva.
Se vuoi rimuovere tutti quei ^ M puoi farlo in vim o con sed usando:
sed s/{ctrl+v}{ctrl+m}// file > new_file
({Ctrl + v} significa premere ctrl e quindi v)
Usa il comando dos2unix:
dos2unix filename
Un altro trucco per rimuovere Ctrl + M nell'editor vi:
:%s/^V^M//g