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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top