Pergunta

Eu tenho duas variáveis:

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

Eu estou tentando imprimi-los tanto em uma única linha separados por dois pontos ':'. Deve olhar como "10.1.172.2:8888"

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

mas ele imprime esta em vez disso:

:8888 IP:10.1.172.2

Por que ele está fazendo isso? Como posso obtê-lo para fazer o que eu quero?

Além disso, as variáveis ??são pré-existente de outro arquivo, então eu não escrevê-los sozinho. O que faz o "^ M" fazer?

Foi útil?

Solução

O arquivo foi transferido a partir do Windows em modo binário, e ainda tem caracteres retorno de carro no fim das linhas.

Eles são os seus símbolos ^M, e eles estão fazendo com que a posição do texto para voltar ao início da linha quando os valores são exibidos - o retorno de carro no final do primeiro valor faz a segunda indicação do valor no início do linha novamente, substituindo parte do primeiro valor.

A correção direita é para transferir o arquivo a partir do Windows usando a transferência de modo de texto, ou para executar dos2unix no arquivo depois que você transferiu. (Ou se o arquivo não vai ser transferido a partir do Windows novamente, basta apagar os personagens ^M!)

Outras dicas

No Windows uma nova linha típica é \ r \ n (em sistemas * nix é apenas \ n).

\ r é retorno de carro.

\ n é nova linha.

^ M é \ r , por isso depois de escrever $ loginIP_BASE você está na posição 0 da linha real.

Se você quiser remover todos aqueles ^ M você pode fazê-lo no vim o com sed usando:

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

({Ctrl + v} significa pressionar ctrl e, em seguida, v)

Use o comando dos2unix:

dos2unix filename

Mais um truque para remover Ctrl + M no vi editor:

:%s/^V^M//g
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top