Como usar o echo no csh

0

Estou tentando escrever um script simples para imprimir algumas das variáveis extraídas de outro arquivo. Com todas as variáveis definidas, o objetivo é imprimir a seguinte linha:

-bad 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly \

Então as complicações aqui são que eu preciso imprimir não apenas as variáveis, mas muitos outros símbolos, incluindo -. \ e eu precisaria de uma quebra de linha no final.

Eu tentei

echo "  -bad 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly  \"

que aparentemente não funcionou e obteve resultados estranhos como este:

\rpdly 67ecim 1792

onde 67 e 1792 eram minhas variáveis $ grpdly e $ decim

Agradecemos antecipadamente por sua ajuda!

    
por Koni 14.09.2016 / 19:11

1 resposta

0

Isso não explica tudo, mas pelo menos parte do problema é que você tem retornos de carro no final de seus valores. Isso significa que está imprimindo algo assim:

  -bad 0.0 -aswap -AMX -decim 1792<CR>
 -dspfvs something<CR>
 -grpdly 67<CR>
 \

... exceto que cada "linha" é impressa em cima da anterior, porque elas são separadas por retornos de carro em vez de feeds de linha. Agora, se você comparar o que eu acabei de descrever à sua saída, ele não será exatamente igual (o meu dá "\ pdly 6792swap -AMX -decim 1792"), então eu acho que há outro em algum lugar por algum motivo.

A causa disso é provavelmente que o arquivo do qual você está lendo está no formato DOS / Windows, que usa um retorno de carro seguido por avanço de linha no final de cada linha; O unix apenas utiliza alimentação de linha e tende a tratar o retorno de carro como parte do conteúdo da linha, e. lê-lo em variáveis no final ... assim como você está recebendo. Uma opção é converter o arquivo para o formato unix com dos2unix ou algum programa semelhante. Outra é remover os retornos de carro conforme você lê o arquivo, algo assim:

set decim = 'cat decimfile | tr -d '\r''

(com qualquer comando real que você esteja usando em vez da parte cat ). Ou, você pode limpar as variáveis depois de lê-las com:

set decim = 'echo $decim | tr -d '\r''

Observe que há diversas convenções diferentes sobre como "gravar" um retorno de carro; Eu tenho usado " <CR> ", mas tr entende "\ r" e alguns outros programas usarão "^ m" ou "^ M".

    
por 14.09.2016 / 20:26

Tags