Por que os resultados da comparação de string sempre são falsos

2

Eu estou tentando fazer uma verificação de uma vez sobre a página mod-status do apache para atualizações assim (isso é apenas um script de teste):

firstcontent=$(lynx -dump http://some-server/server-status-page)
echo $firstcontent > /tmp/myfirstcontentfiles.txt
nextcontent=$(lynx -dump http://some-server/server-status-page)
prevcontent='cat /tmp/myfirstcontentfiles.txt'
#this always returns false, but their contents are same
if [ "$prevcontent" == "$firstcontent" ]; then   echo "match"; fi
#but this returns true 
if [ "$nextcontent" == "$firstcontent" ]; then   echo "match"; fi

Minha pergunta é por que $ prevcontent e $ firstcontent comparision retornam false enquanto eu deveria obter um verdadeiro valor de retorno? alguma coisa está acontecendo por trás da cena quando estou salvando em um arquivo?

    
por MD. Mohiuddin Ahmed 24.12.2014 / 22:01

1 resposta

4

Leia Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais? para entender o porquê. A versão de 1 frase é: use sempre aspas duplas em torno das substituições de variáveis.

echo "$firstcontent" >/tmp/myfirstcontentfiles.txt

funciona principalmente: ele não reduz o espaço em branco ou expande curingas no valor da variável. No entanto, isso ainda remove as linhas vazias finais (a substituição de comandos faz isso) e, em alguns shells, o comando echo expande as barras invertidas. Em seu script, a maneira mais fácil de gravar a saída original do comando em um arquivo é fazê-lo antes que ele atinja o shell:

firstcontent=$(lynx -dump http://some-server/server-status-page | tee /tmp/myfirstcontentfiles.txt)
    
por 25.12.2014 / 03:25