Isso funciona:
if diff "./helloworld$x.out" "./output/helloworld$x.out" >/dev/null; then
echo "Passed $x";
else
echo "Failed $x";
fi
Se você usar uma variável em vez de echo , poderá descartar else branche: defina a variável como false antes de if e salve 2 linhas de código.
Se você quiser realmente colocar o resultado em uma variável use:
some_var="$(diff "./helloworld$x.out" "./output/helloworld$x.out")"
Incluindo meu teste para ver se realmente funciona:
rinzwind@discworld:~$ touch 1
rinzwind@discworld:~$ touch 2
rinzwind@discworld:~$ more test
if diff 1 2 >/dev/null; then
echo "Passed $x";
else
echo "Failed $x";
fi
rinzwind@discworld:~$ ./test
Passed
rinzwind@discworld:~$ vi 2
rinzwind@discworld:~$ more 2
2
rinzwind@discworld:~$ ./test
Failed
Na >/dev/null part: >/dev/null 2>&1 enviará a saída para >/dev/null e 2>&1 enviará erros padrão para o mesmo arquivo ( &1 significa 'use primeiro parâmetro') na frente deste comando (assim ele também usa /dev/null ).
sidenote: sdiff mostrará uma listagem diff lado-a-lado:
sdiff 1 2
1 1
2 2
3 3
4 4
5 5
7 7
> 8
9 9
10 10