Pregunta

Tengo dos variables:

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

Estoy tratando de imprimirlos a ambos en una sola línea separada por dos puntos ':'. Debería verse como "10.1.172.2: 8888"

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

pero imprime esto en su lugar:

:8888 IP:10.1.172.2

¿Por qué está haciendo eso? ¿Cómo puedo hacer que haga lo que quiero?

Además, las variables son preexistentes de otro archivo, por lo que no las escribí yo mismo. ¿Qué significa el " ^ M " hacer?

¿Fue útil?

Solución

El archivo se ha transferido desde Windows en modo binario y todavía tiene caracteres de retorno de carro al final de las líneas.

Son sus símbolos ^ M , y están haciendo que la posición del texto regrese al inicio de la línea cuando se muestran los valores: el retorno de carro al final del primer valor hace que segundo valor visualizado al comienzo de la línea nuevamente, sobrescribiendo parte del primer valor.

La solución correcta es transferir el archivo desde Windows mediante transferencia de modo de texto o ejecutar dos2unix en el archivo después de haberlo transferido. (O si el archivo no se va a transferir desde Windows nuevamente, ¡simplemente elimine los caracteres ^ M !)

Otros consejos

En Windows, una nueva línea típica es \ r \ n (en los sistemas * nix es solo \ n).

\ r es retorno de carro.

\ n es una nueva línea.

^ M es \ r , así que después de escribir $ loginIP_BASE está en la posición 0 de la línea real.

Si desea eliminar todos esos ^ M, puede hacerlo en vim o con sed usando:

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

({Ctrl + v} significa presionar ctrl y luego v)

Use el comando dos2unix:

dos2unix filename

Un truco más para eliminar Ctrl + M en el editor vi:

:%s/^V^M//g
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top